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属性作为统一的配置。

猜你喜欢

转载自blog.csdn.net/keysilence1/article/details/80061989