在@PostConstruct中分配bean值

时间:2019-03-27 20:46:24

标签: java java-ee ejb

在下面的示例中,我需要为Bean2分配Bean1的属性。该属性为null(请参见下文)。另外,“ @ PostConstruct Bean2”在“分配后”之前打印。

在分配Bean1中的值之前,是否有办法确保已创建Bean2实例?

@Stateless
public class Bean1 {

    @Inject
    private Bean2 bean2;

    String x;

    @PostConstruct
    private void init() {
         x = "Some Value";
         System.out.println("Before assignment");
         bean2.setX(x);
         System.out.println("After assignment");
    }
}

@Stateless
public class Bean2 {

    private String x;

    public setX(String x) {
         this.x = x;
    }

    @PostConstruct
    private void init() {
        System.out.println("@PostConstruct Bean2");
        System.out.println(x);  // <-- x is null
    }
  }

1 个答案:

答案 0 :(得分:0)

根据您的设置方式,这是预期的行为。在整个applicationContext旋转后,应在x中正确设置Bean2

要了解发生了什么,请注意Bean2Bean1的依赖项。这意味着在创建之后 Bean1之前,Spring无法构造Bean2。因此,它首先创建了Bean2,并且您看到xinit()块中为空,因为尚未构建Bean1来设置其值。 / p>

稍后,将构造Bean1,将调用其init()方法,并且将正确设置xBean2的值。但这发生在Bean2的{​​{1}}完成之后很久。