1,BeanPostProcessor接口;
不能在POJO上面使用,需要单独找一个类进行使用;
如果在POJO上面实现了此接口,在实现了其他*Aware
接口之后,这个接口方法将不会被调用;
2, POJO实现了BeanNameAware接口;
可以与BeanPostProcessor同时使用;
3, POJO实现了BeanFactoryAware接口;
可以与BeanPostProcessor同时使用;
4, POJO实现了ApplicationContextAware接口;
可以与BeanPostProcessor同时使用;
5,POJO实现了DisposableBean接口;
可以正常调用接口的dispose()方法;
6,在bean声明部分定义的init-method
和destroy-method方法可以正常调用;
7,如果显示调用dispose()、destroy-method方法,
需要使用
AbstractApplicationContext context =
new ClassPathXmlApplicationContext("appbeans.xml");
//...
context.registerShutdownHook();

8,InitializingBean.afterPropertiesSet()方法在init-method()之前调用;

DisposableBean.dispose()方法在destroy-method()之前调用;

声明周期图:

http://my.oschina.net/u/218421/blog/37743

package com.stono.sprtest;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Minstrel implements BeanNameAware, BeanFactoryAware,
ApplicationContextAware, InitializingBean, DisposableBean { public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext(
"appbeans.xml");
Minstrel minstrel = (Minstrel) context.getBean("minstrel");
minstrel.show();
context.registerShutdownHook();
} private String accordion;
private Logger logger = Logger.getLogger(Minstrel.class); private String song; public Minstrel() {
logger.info("default constructor");
} public Minstrel(String song) {
logger.info("song constructor");
this.song = song;
} public Minstrel(String song, String accordion) {
logger.info("song accordion constructor");
this.song = song;
this.accordion = accordion;
} public void destroyMethod() {
logger.info("destroyMethod called");
} public String getAccordion() {
logger.info("getAccordion method");
return accordion;
} public String getSong() {
logger.info("getSong method");
return song;
} public void initMethod() {
logger.info("initMethod called");
} public void setAccordion(String accordion) {
logger.info("setAccordion method");
this.accordion = accordion;
} public void setSong(String song) {
logger.info("setSong method");
this.song = song;
} public void show() {
System.out.println("show method called");
} @Override
public void setBeanName(String name) {
logger.info("com.stono.sprtest.Minstrel.setBeanName(String):" + name);
} @Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
logger.info("com.stono.sprtest.Minstrel.setBeanFactory(BeanFactory):"
+ beanFactory);
} @Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
logger.info("com.stono.sprtest.Minstrel.setApplicationContext(ApplicationContext):"
+ applicationContext);
} @Override
public void afterPropertiesSet() throws Exception {
logger.info("com.stono.sprtest.Minstrel.afterPropertiesSet()");
} @Override
public void destroy() throws Exception {
logger.info("com.stono.sprtest.Minstrel.destroy()");
} }
package com.stono.sprtest;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor; public class AppBeanPostProcessor implements BeanPostProcessor { @Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessBeforeInitialization is called");
return bean;
} @Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessAfterInitialization is called");
return bean;
} }
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="minstrel" class="com.stono.sprtest.Minstrel"
init-method="initMethod" destroy-method="destroyMethod">
<constructor-arg name="song" value="SongSong"></constructor-arg>
<property name="accordion">
<value>oldAccordion</value>
</property>
</bean>
<bean class="com.stono.sprtest.AppBeanPostProcessor"></bean>
</beans>

程序输出:

2015-9-18 7:55:26 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@89fbe3: startup date [Fri Sep 18 07:55:26 CST 2015]; root of context hierarchy
2015-9-18 7:55:26 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [appbeans.xml]
song constructor
setAccordion method
com.stono.sprtest.Minstrel.setBeanName(String):minstrel
com.stono.sprtest.Minstrel.setBeanFactory(BeanFactory):org.springframework.beans.factory.support.DefaultListableBeanFactory@cbf30e: defining beans [minstrel,com.stono.sprtest.AppBeanPostProcessor#0]; root of factory hierarchy
com.stono.sprtest.Minstrel.setApplicationContext(ApplicationContext):org.springframework.context.support.ClassPathXmlApplicationContext@89fbe3: startup date [Fri Sep 18 07:55:26 CST 2015]; root of context hierarchy
postProcessBeforeInitialization is called
com.stono.sprtest.Minstrel.afterPropertiesSet()
initMethod called
postProcessAfterInitialization is called
show method called
2015-9-18 7:55:26 org.springframework.context.support.ClassPathXmlApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@89fbe3: startup date [Fri Sep 18 07:55:26 CST 2015]; root of context hierarchy
com.stono.sprtest.Minstrel.destroy()
destroyMethod called

Spring生命周期各种接口使用的更多相关文章

  1. spring生命周期

    Github地址 最近在整合mybatis-spring. 公司里面已经有一个叫做kylin-datasource的开发包,以前能够提供master和slave2个数据源,最近更新了2.0版本,支持自 ...

  2. 说下spring生命周期

    面试官:说下spring生命周期 程序员:不会 那你先回去等消息吧     Bean实现了BeanNameAware,Spring会将Bean的ID透传给setBeanName java.后端开发.程 ...

  3. spring 生命周期最详解

    转载. https://blog.csdn.net/qq_23473123/article/details/76610052 目的 在大三开始学习spring时,老师就说spring bean周期非常 ...

  4. Spring学习总结(4)-Spring生命周期的回调

    参考文档:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans ...

  5. 【源码】spring生命周期

    一.spring生命周期 1. 实例化Bean 对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用crea ...

  6. Spring生命周期详解

    导读 Spring中Bean的生命周期从容器的启动到停止,涉及到的源码主要是在org.springframework.context.support.AbstractApplicationContex ...

  7. Spring生命周期 Constructor > @PostConstruct > InitializingBean > init-method

    项目中用到了 afterPropertiesSet: 于是具体的查了一下到底afterPropertiesSet到底是什么时候执行的.为什么一定要实现 InitializingBean; **/ @C ...

  8. spring生命周期流程图

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

  9. 七、spring生命周期之初始化和销毁方法

    一.通过@Bean指定初始化和销毁方法 在以往的xml中,我们是这样配置的 <bean id="exampleInitBean" class="examples.E ...

随机推荐

  1. 解决cookie 跨iframe

    document.cookie = "name=caoyc;path=/"document.cookie = "age=13;path=/"//时间可以不要,但 ...

  2. JS——基础知识

    1.alert语句 弹出一个对话框. 2.console 这个是在浏览器的控制台打印输出,也有一些公司将招聘信息打印到浏览器的console窗口,比如百度首页. 3.typeof 用这个关键字可以测试 ...

  3. PageRank算法第一篇

    摘要by crazyhacking: 一 搜索引擎的核心问题就是3个:1.建立资料库,通过爬虫系统实现:2.建立一种数据结构,可以根据关键词找到含有这个词的页面.通过索引系统(倒排索引)实现.3排序系 ...

  4. JAVA语法题

    import java.util.*; public class Birthdays { public static void main(String[] args){ Map<Friends, ...

  5. hibernate--ID生成策略--XML

    xml生成id, a) generator b) 常用4个: native, uuid, identity, sequence 1. 新建java项目,  引入hibernate, junit(use ...

  6. FreeRTOS代码剖析

    FreeRTOS代码剖析之1:内存管理Heap_1.c   FreeRTOS代码剖析之2:内存管理Heap_2.c   FreeRTOS(V8.0.1)系统之xTaskGenericCreate() ...

  7. [iOS Animation]-CALayer 隐式动画

    隐式动画 按照我的意思去做,而不是我说的. -- 埃德娜,辛普森 我们在第一部分讨论了Core Animation除了动画之外可以做到的任何事情.但是动画是Core Animation库一个非常显著的 ...

  8. IFrame跨域访问自定义高度

    由于JS禁止跨域访问,如何实现不同域的子页面将高度返回给父页面本身,是解决自定义高度的难点. JS跨域访问问题描述:应用A访问应用B的资源,由于A,B应用分别部署在不同应用服务器(tomcat)上,属 ...

  9. 【转】Linux正则表达式使用指南

    正则表达式是一种符号表示法,用于识别文本模式.Linux处理正则表达式的主要程序是grep.grep搜索与正则表达式匹配的行,并将结果输送至标准输出. 1. grep匹配模式 grep按下述方式接受选 ...

  10. ios 屏幕方向的设置

    ref: http://www.cnblogs.com/niit-soft-518/p/5611298.html 实际的项目需求.root是TabBarController,里面有4个navigati ...