我将用一个简单的例子解释我的问题:
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()
?
答案 0 :(得分:1)
我相信您正在寻找的是@Postconstruct
,在JSR250中指定,它告诉Spring在将依赖项注入您的bean后立即运行该方法。您还可以实现InitializingBean
接口。查看this了解更多详情和选项。但是,您的循环依赖会使事情变得复杂。 solve this有几种方法,但在一天结束时,你几乎总是更好地重新设计以消除循环依赖。