2014-10-17 60 views
2

我会解释我的问题有一个简单的例子:春:注射前调用方法

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

我相信你要找的是@Postconstruct,在JSR250中有详细说明,它告诉Spring一旦将依赖关系注入到bean中就运行该方法。您也可以实施InitializingBean界面。请查看this了解更多详情和选项。但是,你的循环依赖会让事情变得复杂。 solve this有几种方式,但在一天结束时,您几乎总是可以通过重新设计来消除循环依赖。

+0

谢谢你,但正如你所看到的,我需要调用带有参数和xml的init()我不知道参数..只是在创建A的方法中的本地字段。 – 2014-10-18 10:51:04