我正在学习 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");
}
}
这是我的主类
AbstractApplicationContext abstractAppContext = new ClassPathXmlApplicationContext("spring-config.xml");
MessagesBean msgBean2 = abstractAppContext.getBean("msgBean", MessagesBean.class);
这是我的输出
Printing Hello World
Step 2.Bean is starting
Inside Engine constructor
Inside Car constructor
heating up engine
我的问题是我在主类中只调用了 MessageBean
,它应该只调用 MessageBean Constructor
和 init
方法,但为什么另外两个调用了 beans 构造函数和 init 方法还是我做错了什么?如果我对不同的 bean 有不同的 init、destroy 方法,并且我只想初始化/调用特定的 bean 构造函数和 init 方法,该怎么办?
最佳答案
默认情况下,Spring bean 会立即初始化,如果您希望它们延迟初始化,请在 bean 定义中添加此属性
lazy-init="true"
关于java - Spring初始化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31911826/