【spring源码学习】Spring的IOC容器之BeanPostProcessor接口学习
一:含义作用
==>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接口学习的更多相关文章
- 【spring源码学习】spring的IOC容器之BeanFactoryPostProcessor接口学习
[一]org.springframework.beans.factory.config.BeanFactoryPostProcessor接口==>该接口实现方法的执行时机:该接口void pos ...
- Spring学习之——手写Spring源码V2.0(实现IOC、D、MVC、AOP)
前言 在上一篇<Spring学习之——手写Spring源码(V1.0)>中,我实现了一个Mini版本的Spring框架,在这几天,博主又看了不少关于Spring源码解析的视频,受益匪浅,也 ...
- Spring源码:Spring IoC容器加载过程(2)
Spring源码版本:4.3.23.RELEASE 一.加载XML配置 通过XML配置创建Spring,创建入口是使用org.springframework.context.support.Class ...
- Spring源码:Spring IoC容器加载过程(1)
Spring源码版本:4.3.23.RELEASE 一.加载过程概览 Spring容器加载过程可以在org.springframework.context.support.AbstractApplic ...
- spring源码解析——spring源码导入eclipse
一.前言 众所周知,spring的强大之处.几乎所有的企业级开发中,都使用了spring了.在日常的开发中,我们是否只知道spring的配置,以及简单的使用场景.对其实现的代码没有进行深入的了 ...
- spring源码系列(一)sring源码编译 spring源码下载 spring源码阅读
想对spring框架进行深入的学习一下,看看源代码,提升和沉淀下自己,工欲善其事必先利其器,还是先搭建环境吧. 环境搭建 sping源码之前是svn管理,现在已经迁移到了github中了,新版本基于g ...
- 【Spring 源码】Spring 加载资源并装配对象的过程(XmlBeanDefinitionReader)
Spring 加载资源并装配对象过程 在Spring中对XML配置文件的解析从3.1版本开始不再推荐使用XmlBeanFactory而是使用XmlBeanDefinitionReader. Class ...
- Spring源码阅读-spring启动
web.xml web.xml中的spring容器配置 <listener> <listener-class>org.springframework.web.context.C ...
- 初探Spring源码之Spring Bean的生命周期
写在前面的话: 学无止境,写博客纯粹是一种乐趣而已,把自己理解的东西分享出去,不意味全是对的,欢迎指正! Spring 容器初始化过程做了什么? AnnotationConfigApplication ...
随机推荐
- 程序员、架构师、技术总监、CTO
程序员 程序员,英文名coder/programmer,大家常自嘲叫码农的阶段.这个角色职责是把需求或产品实现为用户可用的软件产品. 此职位为执行级别.另外因为经验较少,一般需要求助别人,或与别人一起 ...
- Saltstack 命令行:批量覆盖指定文件
master指定文件,覆盖到所有minion命令 salt-cp '*' /etc/hosts /etc/ -------------------------------------------- { ...
- 20162326 齐力锋 2016-2017-2 《程序设计与数据结构》 MySort.java 实验博客
实验代码学习编程中的问题及解决方法 代码运行成功截图 首次代码运行出现的问题截图 问题1:无法从静态上下文中引用非静态方法 问题1解决方法及思考: split方法是非静态方法,需要借助对象来调用.我查 ...
- Mysql数据库导出sql脚本
1. 运行环境Centos mysqldump -h localhost -u root -p etv > ./etv.sql etv 是要导出的数据库名 > 设置导出的路径和文件名
- Effective C++ 条款03:尽可能使用const
场景一 用于修饰指针 char greeting[] = "Hello"; char* p = greeting; // non-const pointer, non-const ...
- select 下拉框 设置值
function setSelectOption(objSelect, targetValue){ if(objSelect){ var options = objSelect.options; if ...
- 解决Spark用Maven编译时报Exception in thread "main" java.lang.OutOfMemoryError: PermGen space异常
异常截图: 解决方法: export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
- struts2——多文件上传
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- java用servlet、cookie实现一个阅读记录
效果如图 代码1 package com.xiaostudy.servlet; import java.io.IOException; import java.io.PrintWriter; impo ...
- JSP内置对象及作用
JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): request 用户端请求,此请求会包含来自GET/POST请求的参数 response 网页传回用户端的回应 pageContex ...