@PostConstruct可以用作@ Bean / @ Produces的替代品吗?

时间:2015-04-07 20:47:43

标签: java spring dependency-injection cdi postconstruct

当我想到用@Bean替换任何@Produces(Spring DI)或@PostConstructor(CDI)的可能性时,我正在阅读this post,如下所示CDI示例:

替换:

public class MyClassFactory {

    @Produces
    @RequestScoped
    public MyClass createMyClass() {
        MyClass myClass = new MyClass();
        myClass.setA(1);
        return myClass;
    }
}

public class MyClass {

    private int a;

    private void setA(int a) {
        this.a = a;
    }
}

使用:

public class MyClass {

    @PostConstruct
    public void init() {
        this.setA(1);
    }

    private int a;

    private void setA(int a) {
        this.a = a;
    }
}

这是对的吗?这些选项之间有什么区别?

2 个答案:

答案 0 :(得分:1)

不,@PostConstruct定义了bean的初始化的拦截器。它不能用于定义bean的实例化

答案 1 :(得分:0)

我不认为这是一个不正确的问题。

在默认构造函数调用和依赖项注入(如果有)完成后调用@PostConstruct方法。您可以使用@PostConstruct注释方法初始化bean的实例变量。在这种情况下,使用@PostConstruct和CDI的差异b / w是,CDI返回的实例是上下文实例,因为它是@RequestScoped,'生成'bean的生命周期仅限于一个HTTP请求。一旦现有的HTTP请求完成,就会生成一个新的bean实例。对于@PostConstruct,它的@Dependent范围bean(默认情况下)及其生命周期将“依赖”注入它的bean(使用CDI @Inject)