概述
title: SpringBoot2.扩展接口
Spring扩展描述
判断一个框架或者程序的好坏直观的方法就是看其扩展性如何。
毫无疑问Spring扩展性这方面做的不错。
说到扩展主要还是在容器的refresh这块,也有listener(这一块先放放)
实现原则严格按照开闭原则,内部修改关闭,对扩展开放
咱们先看一张流程图
如上图中主要的画出来了具体的执行流程,下面会具体说到每一个扩展接口的使用场景
BeanDefinitionRegistryPostProcessor
通过实现下面的接口可以动态注册beanDefinition
postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)
BeanFactoryPostProcessor
通过实现下面的接口可以修改所有注册的beanDefinition
postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
InstantiationAwareBeanPostProcessor
实现该接口方法可以用于动态代理或者增强bean
default Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
return null;
}
用于bean中的属性值填充比如@Autowired
default PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeansException {
return pvs;
}
SmartInstantiationAwareBeanPostProcessor
用于判断构造器方法
determineCandidateConstructors
发生bean循环依赖依赖的时候调用
default Object getEarlyBeanReference(Object bean, String beanName) throws BeansException
ApplicationContextAwareProcessor
这里得看一段具体的代码在该类中有如下方法,可以用来获取容器的变量,用于项目中使用。
private void invokeAwareInterfaces(Object bean) {
if (bean instanceof Aware) {
if (bean instanceof EnvironmentAware) {
((EnvironmentAware) bean).setEnvironment(this.applicationContext.getEnvironment());
}
if (bean instanceof EmbeddedValueResolverAware) {
((EmbeddedValueResolverAware) bean).setEmbeddedValueResolver(this.embeddedValueResolver);
}
if (bean instanceof ResourceLoaderAware) {
((ResourceLoaderAware) bean).setResourceLoader(this.applicationContext);
}
if (bean instanceof ApplicationEventPublisherAware) {
((ApplicationEventPublisherAware) bean).setApplicationEventPublisher(this.applicationContext);
}
if (bean instanceof MessageSourceAware) {
((MessageSourceAware) bean).setMessageSource(this.applicationContext);
}
if (bean instanceof ApplicationContextAware) {
((ApplicationContextAware) bean).setApplicationContext(this.applicationContext);
}
}
}
BeanPostProcessor
bean属性设置之前对bean实例修改
default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
bean属性初始化之后对bean修改,aop代理类实现的地方
default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
InitializingBean
初始化bean的时候调用,一般用来针对某个bean配置
afterPropertiesSet
欢迎扫码加入知识星球继续讨论
最后
以上就是儒雅帽子为你收集整理的SpringBoot2.扩展接口的全部内容,希望文章能够帮你解决SpringBoot2.扩展接口所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复