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 Constructor
和init
方法,但是为什么调用了另外两个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容器初始化完成后执行初始化数据方法