本文主要是介绍精通 Spring 源码 | InstantiationAwareBeanPostProcessor(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、简介
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")
@Configuration
public class Appconfig {
}
@Component
public class UserService {@AutowiredIndexService indexService;
}
@Component
public class IndexService {@AutowiredUserService userService;@PostConstructpublic void init(){System.out.println("IndexService 的 userService 属性:"+userService);}
}
@Component
public class OrderService {@AutowiredUserService userService;@PostConstructpublic void init(){System.out.println("OrderService 的 userService 属性:"+userService);}
}
@Component
public class MyInstantiationAwareBeanPostProcessor implements InstantiationAwareBeanPostProcessor {@Overridepublic 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 属性:null
OrderService 的 userService 属性:com.javahly.spring59.service.UserService@3aa9e816
—— 完
ABOUT
公众号:【星尘Pro】
github:https://github.com/huangliangyun
推荐阅读
史上最全,最完美的 JAVA 技术体系思维导图总结,没有之一!
全站导航 | 文章汇总!
这篇关于精通 Spring 源码 | InstantiationAwareBeanPostProcessor(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!