Spring IoC容器-01-Bean級生命週期

一、代碼說明spring

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屬性指定的方法執行了");
    }
}

二、xml配置 spring-chapter2-beanlifecycle.xmlapp

<?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 id="beanLifecycle" 
          class="com.test.lifecycle.beanlifcycle.BeanLifecycle" 
          init-method="lifecycleInit" 
          destroy-method="lifecycleInitDestroy">
    </bean>

</beans>

三、Bean生命週期測試ide

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();
    }

}

四、運行結果測試

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屬性指定的方法執行了
相關文章
相關標籤/搜索