目录:

  1. 了解Spring的基本概念

  2. Spring简单的示例

  3. Spring Bean的定义及作用域

1.Bean的生命周期

Bean的生命周期可以简单的理解为:Bean的定义——Bean的初始化——Bean的使用——Bean的销毁

在其生命周期里,有两个重要的回调方法,可以在初始化Bean和销毁Bean时调用该方法。

在这两个方法里可以额外做一些操作。

首先准备一个类

public class Category {
//属性
private String name;
SimpleDateFormat df=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.sss");
//设置该属性的方法
public void setName(String name){
this.name=name;
}
//获取该属性的方法
public void getName(){
System.out.println(name);
}
//初始化回调
public void start(){
System.out.println("Bean开始使用时间:"+df.format(new Date()));
}
//销毁回调
public void destroy(){
System.out.println("Bean销毁时间:"+df.format(new Date()));
}
}

再准备一个测试类

public class TestSpring {
public static void main(String[] args) throws InterruptedException {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Category category = (Category) context.getBean("c");
category.getName();
//睡眠1秒,更加明显看出两个方法的区别
Thread.sleep(1000);
context.registerShutdownHook();
}
}

测试类中,需要调用AbstractApplicationContext的registerShutdownHook()方法来确保正常关闭,并且调用相关的销毁的回调方法。

配置文件

<?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-3.0.xsd">
<bean id="c" class="SpringBean.Base.Category" init-method="start" destroy-method="destroy">
<property name="name" value="Hello Word"/>
</bean>
</beans>

配置文件中,需要指定初始化回调的方法和销毁回调的方法。

最后输出的是:

Bean开始使用时间:-- ::21.021
Hello Word
Bean销毁时间:-- ::22.022

2.Bean的后置处理器

后置处理器就是在初始化方法的前后进行额外的操作。

上面的Category方法代码不变,再准备一个针对Category初始化的类,就叫initCategory

public class initCategory implements BeanPostProcessor {

    @Override
//会在bean初始化方法前执行
public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
System.out.println("初始化之前执行:"+s);
return o;
} @Override
//会在bean初始化方法后执行
public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
System.out.println("初始化之后执行:"+s);
return o;
}
}

这个类需要实现BeanPostProcessor 接口,并重写其两个方法,方法内就可以写你需要的额外操作。

保持上面的配置文件不变,再加上一句:

<bean class="SpringBean.Base.initCategory"/>

class属性里写上自己的initCategory 类所在的位置

最后输出:

初始化之前执行:c
Bean开始使用时间:-- ::12.012
初始化之后执行:c
Hello Word
Bean销毁时间:-- ::13.013

3.Bean的定义继承

bean的定义可以包含一大堆配置,比如:属性的值,构造函数的参数等。当其他bean需要用到这些设置时,不需要重新配置,只需要继承即可。

继承的用法就相对简单了,在上面代码基础上。可以再添加一个Category2类。内容与Category一样,再添加额外的属性name2和setName2,getName2方法。

并在配置文件中添加如下代码:

 <bean id="c2" class="SpringBean.Base.Category2" parent="c">
<property name="name2" value="Hello Word2"/>
</bean>

可以发现,c2中设置了parent属性,继承id为‘c’的bean。

设置属性当中,只设置了name2,并没有设置name的值,但是调用Category2的getName方法,依旧会输出Hello Word

Spring Bean的生命周期、后置处理器、定义继承的更多相关文章

  1. Spring动态代理及Spring Bean的生命周期

    数组添加值 public class DiTest { /** * 数组 */ private String [] arrays; /** * List:集合 */ private List<I ...

  2. Spring Bean的生命周期 ---附详细流程图及测试代码

    一.生命周期流程图: Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,这其中包含了一系列关键点 假设一个Bean实现了所有的接口,大的概况一下Be ...

  3. Spring源码之BeanFactoryPostProcessor(后置处理器)

    Spring源码之BeanFactoryPostProcessor(后置处理器). 有点水平的Spring开发人员想必都知道BeanFactoryPostProcessor也就是常说的后置管理器,这是 ...

  4. Spring Bean的生命周期(非常详细)

    Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...

  5. Spring Bean的生命周期详解(转)

    Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...

  6. 15、生命周期-BeanPostProcessor-后置处理器

    15.生命周期-BeanPostProcessor-后置处理器 BeanPostProcessor 接口 package org.springframework.beans.factory.confi ...

  7. Spring(三)--Spring bean的生命周期

    Spring bean的生命周期 ApplicationContext Bean生命周期流程 1.需要的实体类 ackage com.xdf.bean; import org.springframew ...

  8. 第37讲 谈谈Spring Bean的生命周期和作用域

    在企业应用软件开发中,Java 是毫无争议的主流语言,开放的 Java EE 规范和强大的开源框架功不可没,其中 Spring 毫无疑问已经成为企业软件开发的事实标准之一.今天这一讲,我将补充 Spr ...

  9. Spring学习手札(四)谈谈Spring Bean的生命周期及作用域

    在Spring中,那些组成应用程序的主体以及由Spring IoC容器所管理的对象,被称之为Bean.Bean与应用程序中其他对象(比如自己创建类)的区别就是,Bean是由IoC容器创建于销毁的.在S ...

  10. 谈谈Spring bean的生命周期(一)

    简介 本片文章主要讲Spring IOC容器中 bean 的生命周期 Spring bean 生命周期 Spring 中bean的声明周期 可以分为如下4个阶段: 实例化阶段--Instantiati ...

随机推荐

  1. [USACO09JAN]安全出行Safe Travel 最短路,并查集

    题目描述 Gremlins have infested the farm. These nasty, ugly fairy-like creatures thwart the cows as each ...

  2. ‎Cocos2d-x 学习笔记(3.3) Layer

    1.简介 Layer直接继承了Node.Layer类似Ps里图层的概念,也可以理解成一块透明玻璃.Scene类似Ps里的一张图像,也可以理解成堆放玻璃的箱子. Layer能接收触摸事件.键盘事件.加速 ...

  3. (21)ASP.NET Core EF创建模型(关系)

    1.关系 关系定义两个实体之间的关系.在关系型数据库中,这由外键约束表示. 2.术语定义 有许多术语用于描述关系:●相关实体:这是包含外键属性的实体.有时称为关系的"子级".●主体 ...

  4. vue-cli2、vue-cli3脚手架详细讲解

    前言: vue脚手架指的是vue-cli它是vue官方提供的一个快速构建单页面(SPA)环境配置的工具,cli 就是(command-line-interface  ) 命令行界面 .vue-cli是 ...

  5. java类对象的初始化顺序

    在下面这个例子中,我们分别在父类和子类中测试了静态代码块.普通代码块.静态成员变量.普通成员变量.构造器.静态内部类. 一:代码块及变量测试 class Field{ public static St ...

  6. JS移动端适配(自适应)

    var html = document.querySelector('html'); changeRem(); window.addEventListener('resize', changeRem) ...

  7. Java基础(43)Queue队列

    Collection接口的第三个子接口是Queue接口,而Queue接口的子接口又是Deque接口和BlockingQueue接口. 实现了Deque接口的类有:ArrayDeque类.Concurr ...

  8. 23 个重难点突破,带你吃透 Service 知识点「长达 1W+ 字」

    前言 学 Android 有一段时间了,想必不少人也和我一样,平时经常东学西凑,感觉知识点有些凌乱难成体系.所以趁着这几天忙里偷闲,把学的东西归纳下,捋捋思路. 这篇文章主要针对 Service 相关 ...

  9. Solr入门(一)

    一丶Solr入门1.Solr的启动Solr各版本下载老版本的时候,需要将war包放到tomcat中,现在只需解压,由于自带jetty容器,可以直接启动 [root@aaa bin]# ./solr s ...

  10. python常用算法(7)——动态规划,回溯法

    引言:从斐波那契数列看动态规划 斐波那契数列:Fn = Fn-1 + Fn-2    ( n = 1,2     fib(1) = fib(2) = 1) 练习:使用递归和非递归的方法来求解斐波那契数 ...