假设我有Spring服务类或JSF bean。我将这些类连接到另一个类中。到目前为止没有问题。我可以在任何方法中使用这些注入的字段。
但是,在构造函数中使用它们会给我一个NullPointerException。
构造函数可能在依赖注入发生之前运行,并且它看不到我注入的字段。有没有在构造函数中使用依赖注入的解决方案?
答案 0 :(得分:4)
不,你不能在构造函数中引用注入的字段。框架必须以某种方式构造您的对象(调用构造函数),然后注入依赖项,以便它们在构造函数执行期间为空。你通常做的是将@PostConstruct
注释应用于你的一个方法并在那里执行初始化:
class MyBean {
@Inject
private MyDependency myDep;
@PostConstruct
public void init() {
assert myDep != null;
}
}
如果是spring xml配置,您可以在init-method="init"
定义中使用@PostConstruct
代替<bean>
。或者,您可以在xml:
<bean id="myBean" class="my.package.MyBean">
<constructor-arg ref="myDependency/>
</bean>
或注释等价物。
答案 1 :(得分:4)
显然,如果此对象不存在,则无法在对象中注入任何内容。要存在,必须构建一个对象。
Spring支持构造函数注入:
@Autowired
public SomeService(SomeDependency dep) {
...
Spring还支持@PostConstruct,它允许在注入所有依赖项后初始化bean。
不了解JSF。