Spring IoC容器-01-Bean级生命周期

深渊向深渊呼唤

1、代码说明


import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * Bean生命周期
 */
public class BeanLifecycle implements BeanNameAware, 
    ApplicationContextAware, InitializingBean, DisposableBean {
    
    /**
     * 1. 构造器
     */
    public BeanLifecycle() {
        System.out.println("1. 【Bean级别】构造器执行了");
    }

    /**
     * 2. BeanNameAware接口方法实现
     */
    @Override
    public void setBeanName(String name) {
        System.out.println("2. 【Bean级别】setBeanName方法执行了");
    }

    /**
     * 3. ApplicationContextAware接口方法实现
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("3. 【Bean级别】setApplicationContext方法执行了");
    }

    /**
     * 4. InitializingBean接口方法实现
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("4. 【Bean级别】afterPropertiesSet方法执行了");
    }

    /**
     * 5. init-method属性指定的方法
     * 指定某个方法在Bean实例化完成,依赖关系设置结束后执行
     */
    public void lifecycleInit() {
        System.out.println("5. 【Bean级别】init-method指定的方法执行了");
    }

    /**
     * 6. Bean中的业务方法
     */
    public void sayHello() {
        System.out.println("6. 【Bean级别】sayHello方法执行了");
    }

    /**
     * 7. DisposableBean接口方法实现
     */
    @Override
    public void destroy() throws Exception {
        System.out.println("7. 【Bean级别】destroy方法执行了");
    }

    /**
     * 8. destroy-method属性指定的方法
     * 指定某个方法在Bean销毁之前被执行
     */
    public void lifecycleInitDestroy() {
        System.out.println("8. 【Bean级别】destroy-method属性指定的方法执行了");
    }
}

2、xml配置 spring-chapter2-beanlifecycle.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--BeanLifecycle-->
    <bean  
           
          init-method="lifecycleInit" 
          destroy-method="lifecycleInitDestroy">
    </bean>

</beans>

3、Bean生命周期测试

import com.test.lifecycle.beanlifcycle.BeanLifecycle;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * @Description Bean生命周期测试
 */
@RunWith(SpringRunner.class)
@ContextConfiguration("classpath:spring-chapter2-beanlifecycle.xml")
public class BeanLifecycleTest {
    @Autowired
    private BeanLifecycle beanLifecycle;

    @Test
    public void test() {
        beanLifecycle.sayHello();
    }

}

4、运行结果

1. 【Bean级别】构造器执行了
2. 【Bean级别】setBeanName方法执行了
3. 【Bean级别】setApplicationContext方法执行了
4. 【Bean级别】afterPropertiesSet方法执行了
5. 【Bean级别】init-method指定的方法执行了
6. 【Bean级别】sayHello方法执行了
7. 【Bean级别】destroy方法执行了
8. 【Bean级别】destroy-method属性指定的方法执行了

 

栏目