自动连线不适用于原型 bean 中的 bean



我正在构建一个REST服务API,我想从REST控制器调用另一个实现类。从MyController,我正在创建一个ServiceImpl的bean,ServiceImpl使用客户对象。(仅用于测试客户预计是单例(。我正在尝试访问原型 bean 中的 bean,但它因空指针而失败。


@RestController
public class MyController {
    static int i = 0;
    public MyController() {
    System.out.println("Inside Controller");
    }
    @RequestMapping("/")
    public int post(ServiceImpl impl) {
    return impl.name(i++);
    }
}

public class Customer {
    String name;
    public Customer() {
    System.out.println("inside customer cons");
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
}

@Configuration 
public class ServiceConfigurations {
    @Bean
    public Customer Customer() {
    return new Customer();
    }   
}

@Component
@Scope(value = "prototype")
public class ServiceImpl {
    int i = 0;
    @Autowired
    Customer c;
    public int name(int name) {
    c.getName();  // Fails with null pointer
    return i++;
    }
}

有人可以帮助为什么@Autowire客户没有设置参考吗?

这里的问题是你的错误期望
这些线条

@RequestMapping("/")
public int post(ServiceImpl impl)

实际上并没有@Autowire一个新的ServiceImpl Bean,他们只是创建了一个新的ServiceImpl实例。根本没有进行注射。

有关 Bean 作用域的概述以及如何使用它们,请参阅 Spring Bean 作用域。

相关内容

  • 没有找到相关文章

最新更新