spring Bean的初始化和销毁 (使用注解)

使用注解定义Bean的初始化和销毁

    Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法。

回顾配置文件的写法:<bean id=“foo” class=“...Foo” init-method=setupdestory-method=teardown/>

注解的写法:

(1)当bean被载入到容器的时候调用setup ,

注解方式如下: 

@PostConstruct

初始化

(2)当bean从容器中删除的时候调用teardown(scope= singleton有效)

注解方式如下:

@PreDestroy 

销毁

 

使用 @PostConstruct 注解, 标明初始化方法 ---相当于 init-method 指定初始化方法

使用 @PreDestroy 注解, 标明销毁方法  ----相当于 destroy-method 指定对象销毁方法

第一步:创建类:LifeCycleBean.java,定义构造方法、初始化的方法、销毁的方法。

//测试生命周期过程中的初始化和销毁bean

@Component("lifeCycleBean")

public class LifeCycleBean {

   

    public LifeCycleBean() {

       System.out.println("LifeCycleBean构造器调用了");

    }

   

    //初始化后自动调用方法:方法名随意,但也不能太随便,一会要配置

    @PostConstruct//初始化的方法

    public void init(){

       System.out.println("LifeCycleBean-init初始化时调用");

    }

   

    //bean销毁时调用的方法

    @PreDestroy

    public void destroy(){

       System.out.println("LifeCycleBean-destroy销毁时调用");

    }

 

}

 

第二步:配置文件,配置spring容器applicationContext.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"

       xmlns:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

                         http://www.springframework.org/schema/beans/spring-beans.xsd

                        http://www.springframework.org/schema/context

                        http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 配置注解扫描

    context:component-scan:专门扫描含有@Component注解的类,自动将其作为bean

    base-package:要扫描包的路径,包含子包,com.igeek.ioc表示子包下的所有类定义注解都有效

    注解扫描配置的时候,会自动开启注解功能

    -->

    <context:component-scan base-package="com.igeek.ioc"/>

   

      

</beans>

第三步:使用SpringTest.java完成测试

@Test

    public void testLifeCycle() throws Exception{

       //spring容器

       ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

       //单例;此时初始化的方法已经被调用

       LifeCycleBean lifeCycleBean = (LifeCycleBean)applicationContext.getBean("lifeCycleBean");

        //方案一:

        //((ClassPathXmlApplicationContext)applicationContext).close();

        //方案二:

       //反射的机制调用close方法。

       //接口只是引用了一个对象。对象本身有这个方法。

       //目标:通过接口引用,调用对象本来的拥有的方法

       //1。获取对象具体类的某个方法:参数1方法名,参数2:方法里面的参数类型

       Method method = applicationContext.getClass().getMethod("close");

       //参数1:拥有该方法的对象的名字,参数2:方法里面的参数的值

       method.invoke(applicationContext);

      

    }

注意:如果要执行对象的销毁方法

         条件一: 单例Bean (在容器close时,单例Bean才会执行销毁方法

         条件二: 必须调用容器 close 方法

猜你喜欢

转载自blog.csdn.net/qq_15204179/article/details/82975083