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 方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_无往而不胜_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值