2014-10-17 6 views
2

Я объясню мою проблему с помощью простого примера:Spring: вызов метода перед инъекцией

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.

Я использую установку инжектора и создаю объект с context.getBean("A").

Можно ли вызвать метод init() перед инъекцией?

ответ

1

Я считаю, что то, что вы ищете, это @Postconstruct, указанный в JSR250, в котором говорится, что Spring запускает метод, как только зависимости будут вставляться в ваш компонент. Вы также можете реализовать интерфейс InitializingBean. Зайдите в this для получения более подробной информации и опций. Однако ваша циклическая зависимость будет усложнять ситуацию. Есть несколько способов до solve this, но в конце дня вы почти всегда лучше переделываете, чтобы удалить круговую зависимость.

+0

спасибо, но, как вы можете видеть, мне нужно вызвать init() с параметрами и в xml. Я не знаю параметров .. это только локальные поля в методе, где я создаю A. –

Смежные вопросы