我是靠谱客的博主 儒雅帽子,最近开发中收集的这篇文章主要介绍SpringBoot2.扩展接口,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


title: SpringBoot2.扩展接口

Spring扩展描述

判断一个框架或者程序的好坏直观的方法就是看其扩展性如何。
毫无疑问Spring扩展性这方面做的不错。
说到扩展主要还是在容器的refresh这块,也有listener(这一块先放放)
实现原则严格按照开闭原则,内部修改关闭,对扩展开放

咱们先看一张流程图
avatar
如上图中主要的画出来了具体的执行流程,下面会具体说到每一个扩展接口的使用场景

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

欢迎扫码加入知识星球继续讨论
avatar

最后

以上就是儒雅帽子为你收集整理的SpringBoot2.扩展接口的全部内容,希望文章能够帮你解决SpringBoot2.扩展接口所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部