Spring:注入前调用方法

时间:2014-10-17 18:13:09

标签: java spring dependency-injection javabeans autowired

我将用一个简单的例子解释我的问题:

public class A () {
    private B b;

    public A () { /* ... */ }

    public B getB () { /* ... */ }

    @Autowired
    public void setB (B b) { /* ... */ }

    public init (int x, int y, float rx, float ry) { /* ... */ }
}

public class B () {
    private A a;

    public B () { /* ... */ }

    public A getA () { /* ... */ }

    @Autowired
    public void setA (A a) { /* ... */ }

    public init (int x, int y, float rx, float ry) { /* ... */ }
}

所以我需要在注入之前调用init()方法,因为注入后立即从注入组件中调用方法,每秒循环fps次,当然没有初始化,所以得到NullPointerException

我使用setter注入并使用context.getBean("A")创建对象。

有没有办法在注射前调用方法init()

1 个答案:

答案 0 :(得分:1)

我相信您正在寻找的是@Postconstruct,在JSR250中指定,它告诉Spring在将依赖项注入您的bean后立即运行该方法。您还可以实现InitializingBean接口。查看this了解更多详情和选项。但是,您的循环依赖会使事情变得复杂。 solve this有几种方法,但在一天结束时,你几乎总是更好地重新设计以消除循环依赖。