将一个 bean 注入另一个 bean 并在构造函数中使用它?
Injecting a bean inside another bean and use it in the constructor?
我有一个看起来像这样的豆子:
@Component
@Scope("session")
public class AlarmChartSettingsBean implements Serializable {
...
在这个 bean 中,我像这样注入另一个 bean:
@Inject
private SessionInfoBean sessionInfoBean;
然后我在第一个 bean 的构造函数中调用注入的 bean,如下所示:
public AlarmChartSettingsBean() {
String atcaIp = sessionInfoBean.getNwConfigBean().getAtcaIP();
}
问题是注入的bean是空的。所以问题是那个bean是什么时候注入的?我可以在构造函数中使用它还是应该在构造 bean 之后使用它?
字段上的 @Inject
将在调用构造函数后自动装配。
注意:在某些 Spring 应用程序中,@Inject
可能不起作用,请改用 @Autowire
。
Spring bean 的构造函数在 Spring 有任何机会自动装配任何字段之前被调用。这解释了为什么 sessionInfoBean
在构造函数中是 null
。
如果你想初始化一个Spring bean,你可以:
用@PostConstruct
注释一个方法:
@PostConstruct
public void init() {
String atcaIp = sessionInfoBean.getNwConfigBean().getAtcaIP();
}
实现InitializingBean
并在afterPropertiesSet
方法中写入初始化代码:
public class AlarmChartSettingsBean implements Serializable, InitializingBean {
@Override
void afterPropertiesSet() {
String atcaIp = sessionInfoBean.getNwConfigBean().getAtcaIP();
}
}
我有一个看起来像这样的豆子:
@Component
@Scope("session")
public class AlarmChartSettingsBean implements Serializable {
...
在这个 bean 中,我像这样注入另一个 bean:
@Inject
private SessionInfoBean sessionInfoBean;
然后我在第一个 bean 的构造函数中调用注入的 bean,如下所示:
public AlarmChartSettingsBean() {
String atcaIp = sessionInfoBean.getNwConfigBean().getAtcaIP();
}
问题是注入的bean是空的。所以问题是那个bean是什么时候注入的?我可以在构造函数中使用它还是应该在构造 bean 之后使用它?
字段上的 @Inject
将在调用构造函数后自动装配。
注意:在某些 Spring 应用程序中,@Inject
可能不起作用,请改用 @Autowire
。
Spring bean 的构造函数在 Spring 有任何机会自动装配任何字段之前被调用。这解释了为什么 sessionInfoBean
在构造函数中是 null
。
如果你想初始化一个Spring bean,你可以:
用
@PostConstruct
注释一个方法:@PostConstruct public void init() { String atcaIp = sessionInfoBean.getNwConfigBean().getAtcaIP(); }
实现
InitializingBean
并在afterPropertiesSet
方法中写入初始化代码:public class AlarmChartSettingsBean implements Serializable, InitializingBean { @Override void afterPropertiesSet() { String atcaIp = sessionInfoBean.getNwConfigBean().getAtcaIP(); } }