文档章节

spring bean的生命周期

h
 hujiapeng
发布于 2016/12/28 09:41
字数 503
阅读 2
收藏 0

一、初始化和销毁

1、项目结构如下:

2、新建ReplyService类

package hjp.spring.beanlifecycle;

public class ReplyService {
    public void addReply() {
        System.out.println("add replay");
    }
    public void myInit(){
        System.out.println("init方法");
    }
    public void myDestroy(){
        System.out.println("destroy 方法");
    }
}

3、新建beans.xml文档,init-method指定初始化时执行方法,destroy-method指定bean销毁时执行方法

注意:销毁方法要求:(1)、必须是单例的(2)、必须关闭容器

<?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 id="replyServiceId" class="hjp.spring.beanlifecycle.ReplyService" init-method="myInit" destroy-method="myDestroy"></bean>
</beans>

4、新建测试类

package hjp.spring.beanlifecycle;

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

public class TestApp {
    @Test
    public void demo1(){
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("hjp/spring/beanlifecycle/beans.xml");
        ReplyService replyService = applicationContext.getBean("replyServiceId", ReplyService.class);
        replyService.addReply();
        applicationContext.close();
    }
}

二、后处理bean

1、spring 后处理bean提供一种机制,可以对实例对象进行修改的机制

2、后处理bean使用

 (1)、编写实现类,实现接口BeanPostProcessor

package hjp.spring.beanlifecycle;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class MyBeanPostProcessor implements BeanPostProcessor {

    /**
     * postProcessAfterInitialization 初始化方法(也就是示例中myInit方法)之前执行
     * postProcessBeforeInitialization 初始化方法(也就是示例中myInit方法)之后执行
     * bean 指spring创建的实例对象,即相当于beans中配置节点bean的属性class实例化对象
     * beanName 指spring 创建实例名称,即beans中配置节点bean的属性Id;可以通过beanName对bean进行过滤处理
     * 如果不进行任何操作,必须将bean进行返回,否则报空指针错误
     */

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        // TODO Auto-generated method stub
        System.out.println("初始化前");
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        // TODO Auto-generated method stub
        System.out.println("初始化后");
        return bean;
    }
}

 (2)、将实现类配置到spring容器,spring容器在创建bean时,都是自动使用后处理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 id="replyServiceId" class="hjp.spring.beanlifecycle.ReplyService"
        init-method="myInit" destroy-method="myDestroy"></bean>
    <!-- 配置后处理bean,只需配置class,spring将自动使用 -->
    <bean class="hjp.spring.beanlifecycle.MyBeanPostProcessor"></bean>
</beans>

 

© 著作权归作者所有

h
粉丝 0
博文 100
码字总数 60569
作品 0
海淀
私信 提问
Spring Bean的生命周期,《Spring 实战》书中的官方说法

连着两天的面试 ,都问到了 Spring 的Bean的生命周期,其中还包括 昨晚一波阿里的电话面试。这里找到了Spring 实战中的官方说法。希望各位要面试的小伙伴记住,以后有可能,或者是有时间 去看...

致未来的自己
2018/08/02
0
0
Spring中管理Bean依赖注入之后和Bean销毁之前的行为

对于Singleton作用域的Bean,Spring容器将会跟踪它们的生命周期,容器知道何时实例化结束、何时销毁。Spring可以管理Bean在实例化结束之后和Bean销毁之前的行为。 Bean依赖关系注入之后的行为...

摆渡者
2014/03/06
0
0
spring4.0之二:@Configuration的使用

从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfi...

文文1
2018/06/01
0
0
Spring中Configuration的理解

从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfi...

吴伟祥
2018/06/28
0
0
分析spring源码第七篇:bean的生命周期

bean的生命周期 一. 其实在查看源码BeanFactory时,就会发现源码就介绍了bean的生命周期,原文如下: 二. bean的实例化过程如下图: bean的生命周期流程图如下图: 三. Bean实例生命周期的执...

潇洒的活着
2018/08/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android双向绑定原理简述

Android双向绑定原理简述 双向绑定涉及两个部分,即将业务状态的变化传递给UI,以及将用户输入信息传递给业务模型。 首先我们来看业务状态是如何传递给UI的。开启dataBinding后,编译器为布局...

tommwq
今天
3
0
Spring系列教程八: Spring实现事务的两种方式

一、 Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。...

我叫小糖主
今天
7
0
CentOS 的基本使用

1. 使用 sudo 命令, 可以以 root 身份执行命令, 必须要在 /etc/sudoers 中定义普通用户 2. 设置 阿里云 yum 镜像, 参考 https://opsx.alibaba.com/mirror # 备份mv /etc/yum.repos.d/CentO...

北漂的我
昨天
3
0
Proxmox VE技巧 移除PVE “没有有效订阅” 的弹窗提示

登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options. 用的是免费版的,所以每次都提示......

以谁为师
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部