1. 程式人生 > >Spring Bean的生命週期之我的理解(五)------InitializingBean

Spring Bean的生命週期之我的理解(五)------InitializingBean

前言

Spring Bean建立後,提供了針對於Bean的兩種初始化方式:

  • 實現InitializingBean介面;
  • 設定init-method屬性;
    本文介紹的是實現InitializingBean介面的方式;

實現

1.定義MyInitializingBean

package com.silence.ioc.initializing;

import org.springframework.beans.factory.InitializingBean;

public class MyInitializingBean implements InitializingBean
{
@Override public void afterPropertiesSet() throws Exception { System.out.println("Initializing Bean!"); } }

2.定義Bean

package com.silence.ioc.ac;

import com.silence.ioc.initializing.MyInitializingBean;

public class ApplicationContextTest extends MyInitializingBean {

    public
void getMessage() { System.out.println("Hello Application Context!"); } public void init() { System.out.println("Init Method!"); } public void destroy() { System.out.println("Destroy Method!"); } }

3.定義配置
命名為spring-context.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-4.0.xsd"> <bean id="ac" class="com.silence.ioc.ac.ApplicationContextTest" init-method="init" destroy-method="destroy"></bean> </beans>

4.定義容器類

package com.silence.ioc.ac;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ApplicationContextContainer {

    public static void main(String[] args) {

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");
        ApplicationContextTest applicationContextTest = (ApplicationContextTest) applicationContext.getBean("ac");
        applicationContextTest.getMessage();

    }

}

5.列印結果

Initializing Bean!
Init Method

由此可以看出同樣是Bean初始化的方式,但是優先後順序,為何順序為先InitializingBean後InitMethod,可以從Spring Bean的生命週期之我的理解(四)——AbstractAutowireCapableBeanFactory(invokeInitMethods)中找到答案。

附錄

如果有太多的Bean擁有初始化或銷燬方法,可以在<\Beans>標籤上面通過配置default-init-method和default-destroy-method屬性作為統一的配置。