java - Spring初始化方法

标签 java spring

我正在学习 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 Constructorinit 方法,但为什么另外两个调用了 beans 构造函数和 init 方法还是我做错了什么?如果我对不同的 bean 有不同的 init、destroy 方法,并且我只想初始化/调用特定的 bean 构造函数和 init 方法,该怎么办?

最佳答案

默认情况下,Spring bean 会立即初始化,如果您希望它们延迟初始化,请在 bean 定义中添加此属性

lazy-init="true"

关于java - Spring初始化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31911826/

相关文章:

java - 在 Kotlin 中将日期字符串转换为所需的格式

java - 计算给定字符串中某个字符的出现次数

java - 是否可以在 String 中声明 Java 中的默认参数?

java - 作为过程的功能的动态(树形)结构(以及Clojure中的实现)

java - 在 Spring Boot 中异步发送响应

java - Spring 动态 URL 生成器的想法

java - @Autowired 处理器为空

eclipse - 如何在Spring中使用STS在root-context.xml文件中配置Bean类?

java - 无法打开 JDBC 连接以执行 DDL docker

在 Heroku 中部署 war 文件时出现 java.lang.OutOfMemoryError