Spring之定制bean的生命始末

有时候需要在bean的生命始末做一些自己的操作

接口

package com.hk.spring.ba06;

public interface ISomeSerice {

    public String doFirst();
    public void doSecond();
}

接口实现类

package com.hk.spring.ba06;

public class ISomeServiceImpl implements ISomeSerice {


    public ISomeServiceImpl() {
        System.out.println("无参构造器被执行");
    }

    public ISomeServiceImpl(int a) {
        System.out.println("无参构造器被执行"+a);
    }
    @Override
    public String doFirst() {

        System.out.println("执行doFirst");
        return "hello spring";
    }

    @Override
    public void doSecond() {
        System.out.println("执行doSecond");
    }
    //普通方法,需要注册
    public void initAfter(){
        System.out.println("初始化之后");
    }
    public void perDestroy(){
        System.out.println("销毁之前");
    }
}

bean配置

<?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">

    <!-- bean definitions here -->
    <!-- 注册 service对象 ISomeSerice iSomeService = new ISomeServiceImpl();
            创建的时间是Spring容器被初始化是时候
            配置初始化后要执行的方法和销毁前执行的方法
    -->
    <bean id="someService" class="com.hk.spring.ba06.ISomeServiceImpl" init-method="initAfter" destroy-method="perDestroy"/>
</beans>

测试方法

package com.hk.spring.ba06;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Mytest {
    /**
     * 定制bean的生命始末
     */
    @Test
    public void test_1(){
        //加载Spring配置文件 创建Spring容器对象
        String resource = "/com/hk/spring/ba06/applicationContext.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(resource);
        //从容器中获取指定bean对象
        ISomeSerice iSomeService = (ISomeSerice) ac.getBean("someService");
        String result = iSomeService.doFirst();
        System.out.println(result);
        iSomeService.doSecond();
        //  销毁方法的执行有两个要求
        //  一、被销毁的对象要是singleton,即单例的(默认就是单例的)
        //  二、容器要被显示的关闭(ApplicationContext没有close方法,但它的实现类有)
        ((ClassPathXmlApplicationContext) ac).close();; 
    }
}

运行结果

无参构造器被执行
初始化之后
执行doFirst
hello spring
执行doSecond
销毁之前
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值