Spring初始化方法

Posted

技术标签:

【中文标题】Spring初始化方法【英文标题】:Spring init methods 【发布时间】:2015-08-10 04:51:29 【问题描述】:

我正在学习spring,我对init、destroy方法和构造函数部分感到困惑

这是spring-config.xml

   <bean id="msgBean" class="com.example1.MessagesBean" init-method="start">

    </bean>  

    <bean name="carBean" class="com.example2.Car" init-method="initEngine">
        <constructor-arg ref="engineBean" />
    </bean>

    <bean id="engineBean" class="com.example2.Engine" />

这是Car.java

public class Car 

    private Engine engine;

    public Car(Engine engine)
        System.out.println("Inside Car constructor");
        this.engine = engine;
    

    public void startCarEngine()
        engine.startEngine();
    

    private void initEngine()
        System.out.println("heating up engine");
    

这是Engine.java

public class Engine 

    public Engine()
        System.out.println("Inside Engine constructor");
    

    public void startEngine()
        System.out.println("Engine is starting...");
    

这是MessageBean.java

public class MessagesBean 

    private static final String HELLO_WORLD = "Hello World";

    public MessagesBean()
        System.out.println("Printing " + HELLO_WORLD);
    


    public void start()
        System.out.println("Step 2.Bean is starting");
       


这是我的Main class

    AbstractApplicationContext abstractAppContext = new ClassPathXmlApplicationContext("spring-config.xml");
    MessagesBean msgBean2 = abstractAppContext.getBean("msgBean", MessagesBean.class);

这是我的output

    Printing Hello World
    Step 2.Bean is starting
    Inside Engine constructor
    Inside Car constructor
    heating up engine

我的问题是我在主类中只调用了MessageBean,它应该只调用MessageBean Constructorinit 方法,但是为什么调用了另外两个bean 构造函数和init 方法或者我做错了什么?如果我对不同的 bean 有不同的 init、destroy 方法,而我只想初始化/调用特定的 bean(s) 构造函数和 init 方法怎么办?

【问题讨论】:

如果将其标记为惰性初始化,它将惰性创建 bean。默认情况下它是渴望的。 阅读这个http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html 【参考方案1】:

默认情况下,spring bean 会被急切地初始化,如果您希望它们延迟初始化,请在 bean 定义中添加此属性

lazy-init="true"

【讨论】:

以上是关于Spring初始化方法的主要内容,如果未能解决你的问题,请参考以下文章

Spring实战Spring容器初始化完成后执行初始化数据方法

Spring源码解析之八finishBeanFactoryInitialization方法即初始化单例bean

spring 初始化Bean

spring-初始化方法&摧毁方法

spring-初始化方法&摧毁方法

4、spring初始化过程