博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
精通 Spring 源码 | InstantiationAwareBeanPostProcessor(2)
阅读量:4104 次
发布时间:2019-05-25

本文共 1997 字,大约阅读时间需要 6 分钟。

一、简介

InstantiationAwareBeanPostProcessor 是 Spring 的一个扩展点,他是 BeanPostProcessor 的子类,扩展了 BeanPostProcessor ,而外提供了 3 个方法:

1、Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName)

2、boolean postProcessAfterInstantiation(Object bean, String beanName)
3、PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName)

本篇我们来了解 postProcessAfterInstantiation 这个方法的作用,这个方法在 postProcessPropertyValues 之前执行,他有一个 boolean 值,主要是判断 bean是否需要填充属性,如果返回 true ,填充属性,如果返回 false,不填充属性。Spring 中默认实现了这个后置处理器的扩展点都是返回 true,所以才能正常填充属性。如果我们自定义了一个类,实现了InstantiationAwareBeanPostProcessor 的 postProcessAfterInstantiation 方法,返回 false,将不会给所有的 bean填充属性,但是,这个方法有两个参数,bean,beanName,使得我们可以针对性的判断哪个 Bean 需不需要填充属性。下面,我们通过代码更好理解。

二、示例代码

配置类

@ComponentScan("com.javahly.spring59")@Configurationpublic class Appconfig {}
@Componentpublic class UserService {	@Autowired	IndexService indexService;}
@Componentpublic class IndexService {	@Autowired	UserService userService;	@PostConstruct	public void init(){		System.out.println("IndexService 的 userService 属性:"+userService);	}}
@Componentpublic class OrderService {	@Autowired	UserService userService;	@PostConstruct	public void init(){		System.out.println("OrderService 的 userService 属性:"+userService);	}}
@Componentpublic class MyInstantiationAwareBeanPostProcessor implements InstantiationAwareBeanPostProcessor {	@Override	public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {		if(beanName.endsWith("indexService")){			return false;		}		return true;	}}

三、结果

这里我们用 UserService,IndexService,OrderService 三个类,UserService,IndexService 注入了 OrderService属性,我们自定义了一个 MyInstantiationAwareBeanPostProcessor 实现了 InstantiationAwareBeanPostProcessor,重写了 postProcessAfterInstantiation 方法,如果是 indexService ,则返回 false,表示不再注入属性。我们且看执行结果。

IndexService 的 userService 属性:nullOrderService 的 userService 属性:com.javahly.spring59.service.UserService@3aa9e816

—— 完

ABOUT

公众号:【星尘Pro】

github:

推荐阅读

转载地址:http://uffsi.baihongyu.com/

你可能感兴趣的文章
计算机网络-OSI各层概述
查看>>
Java--String/StringBuffer/StringBuilder区别
查看>>
分布式之redis复习精讲
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
(python版)《剑指Offer》JZ06:旋转数组的最小数字
查看>>
(python版)《剑指Offer》JZ13:调整数组顺序使奇数位于偶数前面
查看>>
(python版)《剑指Offer》JZ28:数组中出现次数超过一半的数字
查看>>
(python版)《剑指Offer》JZ30:连续子数组的最大和
查看>>
(python版)《剑指Offer》JZ02:替换空格
查看>>
JSP/Servlet——MVC设计模式
查看>>
使用JSTL
查看>>
Java 8新特性:Stream API
查看>>
管理用户状态——Cookie与Session
查看>>
最受欢迎的前端框架Bootstrap 入门
查看>>
JavaScript编程简介:DOM、AJAX与Chrome调试器
查看>>
通过Maven管理项目依赖
查看>>
通过Spring Boot三分钟创建Spring Web项目
查看>>
Spring的IoC(依赖注入)原理
查看>>
Java编程基础:static的用法
查看>>
Java编程基础:抽象类和接口
查看>>