Spring源码窥探之:BeanPostProcessor
Spring的Bean后置处理器
1. 实体类
/**
* @author 70KG
* @Title: Train
* @Description:
* @date 2018/7/23下午11:31
* @From www.nmyswls.com
*/
public class Train { public Train() {
System.out.println("Train构造方法执行。。。。。。");
} public void init() {
System.out.println("Train的init方法执行。。。。。。");
} public void destroy() {
System.out.println("Train的destroy方法执行。。。。。。");
} }
2. 配置类
⚠️加上对实现类的扫描
/**
* @author 70KG
* @Title: config
* @Description:
* @date 2018/7/23下午11:31
* @From www.nmyswls.com
*/
@Configuration
@ComponentScan("com.nmys.story.springCore.springioc.beanpostprocessor_")
public class Config01 { @Bean(initMethod = "init",destroyMethod = "destroy")
public Train train(){
return new Train();
} }
3. BeanPostProcessor的实现类
⚠️加上@Component注解,目的为了让spring来管理这个实现类
/**
* @author 70KG
* @Title: BeanPostProcessorImpl
* @Description: bean的后置处理器
* @date 2018/7/23下午11:31
* @From www.nmyswls.com
*/
@Component
public class BeanPostProcessorImpl implements BeanPostProcessor { @Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// 返回一个传过来的对象
// 在初始化方法调用之前进行后置处理工作
// 什么时候调用呢?在init-method方法之前就调用了
System.out.println("postProcessBeforeInitialization======" + beanName + "======" + bean);
return bean;
} @Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization======" + beanName + "======" + bean);
return bean;
} }
4. 测试
/**
* @author 70KG
* @Title: FutureTaskTest
* @Description:
* @date 2018/7/23下午11:31
* @From www.nmyswls.com
*/
public class Test01 { @Test
public void test() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(Config01.class); ac.close(); } }
5. 结果
Train构造方法执行。。。。。。
postProcessBeforeInitialization======train======com.nmys.story.springCore.springioc.beanpostprocessor_.Train@3b69e7d1
Train的init方法执行。。。。。。
postProcessAfterInitialization======train======com.nmys.story.springCore.springioc.beanpostprocessor_.Train@3b69e7d1
Train的destroy方法执行。。。。。。
BeanPostProcessor主要是在类初始化之前,跟之后处理相应的事。
Spring源码窥探之:BeanPostProcessor的更多相关文章
- [spring源码学习]五-BeanPostProcessor的使用
一.接口描述 spring提供了一个接口类-BeanPostProcessor,我们叫他:bean的加工器,应该是在bean的实例化过程中对bean做一些包装处理,里边提供两个方法 public in ...
- spring 源码分析之BeanPostProcessor
1.官方解答: Factory hook that allows for custom modification of new bean instances, e.g. checking for ma ...
- Spring源码窥探之:注解方式的AOP原理
AOP入口代码分析 通过注解的方式来实现AOP1. @EnableAspectJAutoProxy通过@Import注解向容器中注入了AspectJAutoProxyRegistrar这个类,而它在容 ...
- Spring源码窥探之:单实例Bean的创建过程
finishBeanFactoryInitialization(beanFactory);初始化剩下的所有的单实例(非懒加载)Bean(Instantiate all remaining (non-l ...
- Spring源码窥探之:声明式事务
1. 导入驱动,连接池,jdbc和AOP的依赖 <!-- c3p0数据库连接池 --> <dependency> <groupId>c3p0</groupId ...
- Spring源码窥探之:AOP注解
AOP也就是我们日常说的@面向切面编程,看概念比较晦涩难懂,难懂的是设计理念,以及这样设计的好处是什么.在Spring的AOP中,常用的几个注解如下:@Aspect,@Before,@After,@A ...
- Spring源码窥探之:@Profile
Spring为我们提供的多环境启动 1. 配置类,注入三个不同环境的数据源,并加上注解 /** * description: 以下准备了三套不同环境的数据源 * * @author 70KG * @d ...
- Spring源码窥探之:Spring AOP初步使用
AOP即面向切面编程.它的底层实际是用了spring的动态代理,具体是JDK的代理还是CGLIB的代理,就视情况而定了.本博客园仅仅作为平时记录,显得有些杂乱无章,如果想了解动态代理,设计模式,请访问 ...
- Spring源码窥探之:@Value
1. 首先定义实体 /** * @author 70KG * @Title: Apple * @Description: 苹果实体 * @date 2018/10/22下午9:26 * @From w ...
随机推荐
- UE项目打包
https://docs.unrealengine.com/zh-CN/Engine/Basics/Projects/Packaging/index.html 必须先对虚幻项目进行正确打包,之后才能将 ...
- java接入微信JS-SDK
在微信公众号开发中不可,jssdk的接入虽然不是必须,但是根据业务需求我们还是可能用到,下面是自己整理的关于java接入的jssdk的方法,这里是记录关于接入微信JS-SDK的准备工作,关于接入JS- ...
- SQL——DELETE(删)
一.DELETE语句的基本用法 DELETE语句用于删除表中的记录. DELETE语句语法: DELETE FROM 表名 WHERE 条件语句; 演示student表: 删除student表最后一行 ...
- 【LEETCODE】53、数组分类,简单级别,题目:989、674、1018、724、840、747
真的感觉有点难... 这还是简单级别... 我也是醉了 package y2019.Algorithm.array; import java.math.BigDecimal; import java. ...
- ArcGIS 字段计算器 Python 坑
最近要处理个简单数据,一个字段中为文本类型,包含各种描述.要求是包含平方米的数值提取出来,变成数值,如果包含多个,则把各个值累加起来. 比如 字段值为 “非法占用100平方米” 处理后结果为 100 ...
- 记redis一次Could not get a resource from the pool 异常的解决过程
最近有个项目中的redis每天都会报 "Could not get a resource from the pool"的错误,而这套代码在另一地方部署又没有问题.一直找不到错误原因 ...
- 浅谈对BFC的认识,以及用bfc解决浮动问题
我们在前端的学习过程中常常会遇到BFC,用BFC来解决一些margin塌陷.margin合并清理浮动流的问题 那么问题来了,我们所说的BFC到底是个什么东西呢: 什么是BFC BFC(Block Fo ...
- 使用layui框架根据字段来设置tr行的背景色
问题来源:最近在写公司项目时使用layui遇见的问题,老板要求根据td字段来设置整行tr的背景色. 解决:一开始数据比较少的时候只是直接在页面根据js动态判断字段然后来更改背景色,结果能够成功,但是后 ...
- FreeRTOS任务状态信息查询
uxTaskPriorityGet():查询某个任务的优先级 vTaskPrioritySet():改变某个任务的任务优先级 uxTaskGetSystemState():获取系统中任务状态 vTas ...
- centos7开启80端口及其他端口
首先centos7的防火墙由iptables改为了firewalld 1. 执行命令:firewall-cmd --zone=public --add-port=80/tcp --permanent ...