在@PostConstruct中分配bean值

问题描述 投票:0回答:1

在下面的示例中,我需要为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
    }
  }
java java-ee ejb
1个回答
0
投票

这是基于您如何设置的预期行为。在整个applicationContext被旋转之后,x应该在Bean2中正确设置。

要了解发生了什么,请注意Bean2Bean1的依赖。这意味着在Bean1创建之后,Spring无法构建Bean2。因此它首先创建Bean2,并且您在x块中看到init()为null,因为尚未构造Bean1以便能够设置其值。

之后,将构建Bean1,将调用其init()方法,并且将正确设置xBean2的值。但这种情况发生在Bean2@PostConstruct已经结束之后很久。

© www.soinside.com 2019 - 2024. All rights reserved.