一:含义作用

==>BeanPostProcessor接口是众多Spring提供给开发者的bean生命周期内自定义逻辑拓展接口中的一个

二:接口定义

package org.springframework.beans.factory.config;

import org.springframework.beans.BeansException;

public interface BeanPostProcessor {

    /**
*IOC容器中的bean实例化之前执行
*/
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException; /**
*IOC容器中的bean实例化之后执行
*/
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException; }

三:自定义实例(在ioc实例化的时候执行,并打印内容。xml配置bean,或用注解注释,即可生效)

package com.mobile.thinks.manages.study;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component; @Component
public class MyBeanPostProcessor implements BeanPostProcessor{ /**
* IOC容器中bean在被实例化之前执行该方法
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
Class<?> cls=bean.getClass();
System.out.println("sxf 【自定义实例化之前】postProcessBeforeInitialization类路径==>"+cls);
System.out.println("sxf 【自定义实例化之前】postProcessBeforeInitialization初始化对象的名字==>"+beanName);
return bean;
} /**
* IOC容器中bean在被实例化之后执行该方法
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
Class<?> cls=bean.getClass();
System.out.println("sxf 【自定义实例化之后】postProcessBeforeInitialization类路径==>"+cls);
System.out.println("sxf 【自定义实例化之后】postProcessBeforeInitialization初始化对象的名字==>"+beanName);
return bean;
} }

四:spring内部例子

【1】org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor 类

==>在postProcessAfterInitialization 方法中,将bean中的方法标注有@Async注解的bean,不返回IOC真实的实例化对象,而是返回一个代理对象(动态代理)。org.springframework.scheduling.annotation.AsyncAnnotationAdvisor作为代理对象的执行增强(切面+增加)

【2】org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator 类

==>在postProcessAfterInitialization 方法中对bean进行动态代理。

【spring源码学习】Spring的IOC容器之BeanPostProcessor接口学习的更多相关文章

  1. 【spring源码学习】spring的IOC容器之BeanFactoryPostProcessor接口学习

    [一]org.springframework.beans.factory.config.BeanFactoryPostProcessor接口==>该接口实现方法的执行时机:该接口void pos ...

  2. Spring学习之——手写Spring源码V2.0(实现IOC、D、MVC、AOP)

    前言 在上一篇<Spring学习之——手写Spring源码(V1.0)>中,我实现了一个Mini版本的Spring框架,在这几天,博主又看了不少关于Spring源码解析的视频,受益匪浅,也 ...

  3. Spring源码:Spring IoC容器加载过程(2)

    Spring源码版本:4.3.23.RELEASE 一.加载XML配置 通过XML配置创建Spring,创建入口是使用org.springframework.context.support.Class ...

  4. Spring源码:Spring IoC容器加载过程(1)

    Spring源码版本:4.3.23.RELEASE 一.加载过程概览 Spring容器加载过程可以在org.springframework.context.support.AbstractApplic ...

  5. spring源码解析——spring源码导入eclipse

    一.前言     众所周知,spring的强大之处.几乎所有的企业级开发中,都使用了spring了.在日常的开发中,我们是否只知道spring的配置,以及简单的使用场景.对其实现的代码没有进行深入的了 ...

  6. spring源码系列(一)sring源码编译 spring源码下载 spring源码阅读

    想对spring框架进行深入的学习一下,看看源代码,提升和沉淀下自己,工欲善其事必先利其器,还是先搭建环境吧. 环境搭建 sping源码之前是svn管理,现在已经迁移到了github中了,新版本基于g ...

  7. 【Spring 源码】Spring 加载资源并装配对象的过程(XmlBeanDefinitionReader)

    Spring 加载资源并装配对象过程 在Spring中对XML配置文件的解析从3.1版本开始不再推荐使用XmlBeanFactory而是使用XmlBeanDefinitionReader. Class ...

  8. Spring源码阅读-spring启动

    web.xml web.xml中的spring容器配置 <listener> <listener-class>org.springframework.web.context.C ...

  9. 初探Spring源码之Spring Bean的生命周期

    写在前面的话: 学无止境,写博客纯粹是一种乐趣而已,把自己理解的东西分享出去,不意味全是对的,欢迎指正! Spring 容器初始化过程做了什么? AnnotationConfigApplication ...

随机推荐

  1. pycharm中创建并设置docker解释器

    在Windows上使用Docker的其中一个目的是使其与PyCharm结合,形成Python代码的解释器,避免重复的Python解释环境搭建的问题,同时保持Windows开发环境和部署环境所用的Pyt ...

  2. filter方法解析

    filter一般用于将数组中的某些元素过滤掉,并生成一个新的数组 基本语法如下: var newArray= arrayObj.filter(functionObj); newArray 根据过滤条件 ...

  3. MapReduce:实现文档倒序排序,且字符串拼接+年+月+日

    写出MapReduce程序完成以下功能. input1: -- a -- b -- c -- d -- a -- b -- c -- c input2: -- b -- a -- b -- d -- ...

  4. RN项目中缩进处理

    SpannableString使用详解http://blog.csdn.net/u012702547/article/details/49895157 Spannable的用法http://www.j ...

  5. Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 详解 .

    http://blog.csdn.net/lucherr/article/details/8498400 看资料的时候经常看到各种VGA,全都混了,无奈,找了些资料总结了下,分享给大家: 这些术语都是 ...

  6. hibernate-Table 'XXX.XXX' doesn't exist

    hibernate---Table 'XXX.XXX' doesn't exist 在设置自动生成数据表的策略中: <!-- 自动生成数据表的策略 --> <property nam ...

  7. JSP web.xml <jsp-config>标签使用详解

    <jsp-config> 包括 <taglib> 和 <jsp-property-group> 两个子元素.其中<taglib> 元素在JSP 1.2  ...

  8. Shell中find中的atime、ctime、mtime的区别

    Shell中find中的atime.ctime.mtime的区别 find用法: -atime n File was last accessed n*24 hours ago. 访问(读取文件或执行文 ...

  9. Kubernetes的网络模型

    http://blog.csdn.net/zjysource/article/details/52052420

  10. MySQL二进制日志功能介绍

    二进制日志记录所有更新数据的SQL语句,其中也包含可能更新数据的SQL语句,例如DELETE语句执行过程中无匹配的行.二进制日志中还包含了与执行SQL语句相关的内容,例如SQL语句执行的时间.错误代码 ...