Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > spring injection


Автор: irris 25.3.2015, 12:52
Всем привет!
Начала изучать spring, столкнулась со странным поведением. Есть класс:
Код

public class Numeric {

    private int num = 0;
    
    

    public Numeric(){}
    
    public void initNum() {
        num = 44;
        System.out.println("init: ");
        printNum();
    }
    
    public void destroyNum() {
        num = 99;
        printNum();
    }
    
    public void add1() {
        num++;
    }
    
    public void printNum() {
        System.out.println(num);
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
    
}


Добавляю в конфигурационный файл spring 2 бина:
Код

        <bean id="propnum" 
     class="ru.losevapetrova.learning.Numeric">
     <property name="num" value="6"></property>
        
    </bean>
    
    <bean id="unusialnum" 
     class="ru.losevapetrova.learning.Numeric"
     init-method="initNum"
     destroy-method="destroyNum">
        
    </bean>


Вызываю первый:
Код

                ApplicationContext ctx = new ClassPathXmlApplicationContext(
                "spring_conf.xml");
        Numeric performer = (Numeric)ctx.getBean("propnum");
        performer.add1();
        performer.printNum();

Выводится следующее:
init: 
44
7

Т.е. получается, что вызывается и инит метод, который вызываться вроде как и не должен, потому что он в этим бине не объявлен. Почему так происходит?

Автор: AntonSaburov 31.3.2015, 16:02
Так по умолчанию Спринг сразу создает все бины, которые объявлены в конфигурации - если не использовать "ленивую" инициализацию. Об этом вы не просите - Спринг создает все бины. Ну и вызывается init. Все правильно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)