我正在构建一个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 作用域。