在另一个bean中注入一个bean并在构造函数中使用它?

时间:2015-09-14 12:24:06

标签: spring constructor dependency-injection managed-bean

我有一个看起来像这样的bean:

@Component
@Scope("session")
public class AlarmChartSettingsBean implements Serializable {
...

在这个bean里面我注入了另一个这样的bean:

@Inject
private SessionInfoBean sessionInfoBean;

然后我在第一个bean的构造函数中调用注入的bean,如下所示:

public AlarmChartSettingsBean() {

    String atcaIp = sessionInfoBean.getNwConfigBean().getAtcaIP();
}

问题是注入的bean为null。所以问题是那个豆注入的时间是什么时候?我可以在构造函数中使用它,或者我应该在构造bean之后使用它吗?

2 个答案:

答案 0 :(得分:3)

在Spring有机会自动装配任何字段之前调用Spring bean的构造函数。这解释了为什么@PostConstruct public void init() { String atcaIp = sessionInfoBean.getNwConfigBean().getAtcaIP(); } 在构造函数中是afterPropertiesSet

如果要初始化Spring bean,可以:

  • 使用flow content注释方法:

    public class AlarmChartSettingsBean implements Serializable, InitializingBean {
    
        @Override
        void afterPropertiesSet() {
            String atcaIp = sessionInfoBean.getNwConfigBean().getAtcaIP();
        }
    
    }
    
  • 实现@PostConstruct并在t2 = t[:2] + (t[2] + 1,) + t[3:] 方法中编写初始化代码:

    origin

答案 1 :(得分:1)

在调用构造函数后,Field上的@Inject将自动装配。

注意:在某些Spring-Apps中,@Inject可能无效,请改用@Autowire