2014-10-17 2 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 injection을 사용하고 context.getBean("A")으로 개체를 만듭니다.

주입 전에 방법 init()을 호출 할 수있는 방법이 있습니까?

답변

1

당신이 찾고있는 것이 JSR250에 지정된 @Postconstruct인데, Spring에 의존성이 당신의 빈에 주입 되 자마자 Spring이 메소드를 실행하도록 알려줍니다. InitializingBean 인터페이스를 구현할 수도 있습니다. 자세한 내용 및 옵션은 this을 확인하십시오. 그러나 순환 의존성은 사물을 복잡하게 만들 것입니다. solve this에는 몇 가지 방법이 있지만 하루가 끝날 때 순환 의존성을 제거하기 위해 다시 디자인하는 것이 좋습니다.

+0

고맙습니다.하지만 알 수 있듯이 매개 변수가있는 init()을 호출해야하고 매개 변수를 모르는 xml 메서드를 사용합니다. A. 메서드를 만드는 데 사용하는 로컬 필드 만 있습니다. –

관련 문제