将一个 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();
        }
    
    }