手机回收网站做多久,鞍山网站制作一般需要多少钱,最新网页游戏传奇,模板尺寸规格及价格概述
在refresh方法中的prepareBeanFactory方法中#xff0c;有一个拓展点#xff1a;addBeanPostProcessor。即通过注入Aware对象从而将容器中的某些值设置到某个bean中。
beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));aware接口调用
…概述
在refresh方法中的prepareBeanFactory方法中有一个拓展点addBeanPostProcessor。即通过注入Aware对象从而将容器中的某些值设置到某个bean中。
beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));aware接口调用
invokeAwareMethods
该方法在doCreateBean的initializeBean方法中。 只是BeanNameAware BeanClassLoaderAware BeanFactoryAware时是通过invokeAwareMethods方法调用的。 private void invokeAwareMethods(String beanName, Object bean) {if (bean instanceof Aware) {if (bean instanceof BeanNameAware) {((BeanNameAware) bean).setBeanName(beanName);}if (bean instanceof BeanClassLoaderAware) {ClassLoader bcl getBeanClassLoader();if (bcl ! null) {((BeanClassLoaderAware) bean).setBeanClassLoader(bcl);}}if (bean instanceof BeanFactoryAware) {((BeanFactoryAware) bean).setBeanFactory(AbstractAutowireCapableBeanFactory.this);}}}若是其他aware接口则是通过实现BeanPostProcessor调用的如ApplicationContextAwareProcessor
ApplicationContextAwareProcessor
class ApplicationContextAwareProcessor implements BeanPostProcessor 重写了postProcessBeforeInitialization方法在这里是具体的处理逻辑调用逻辑是在invokeAwareMethods的applyBeanPostProcessorsBeforeInitialization方法中 OverrideNullablepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {if (!(bean instanceof EnvironmentAware || bean instanceof EmbeddedValueResolverAware ||bean instanceof ResourceLoaderAware || bean instanceof ApplicationEventPublisherAware ||bean instanceof MessageSourceAware || bean instanceof ApplicationContextAware)){return bean;}AccessControlContext acc null;if (System.getSecurityManager() ! null) {acc this.applicationContext.getBeanFactory().getAccessControlContext();}if (acc ! null) {AccessController.doPrivileged((PrivilegedActionObject) () - {invokeAwareInterfaces(bean);return null;}, acc);}else {invokeAwareInterfaces(bean);}return bean;}调用aware接口
private void invokeAwareInterfaces(Object bean) {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);}}applyBeanPostProcessorsBeforeInitialization
该方法也在initializeBean中
protected Object initializeBean(String beanName, Object bean, Nullable RootBeanDefinition mbd) {if (System.getSecurityManager() ! null) {AccessController.doPrivileged((PrivilegedActionObject) () - {invokeAwareMethods(beanName, bean);return null;}, getAccessControlContext());}else {// 对实现了aware接口的bean执行aware实现方法invokeAwareMethods(beanName, bean);}Object wrappedBean bean;if (mbd null || !mbd.isSynthetic()) {// 调用BeanPostProcessor的postProcessBeforeInitialization方法的实现wrappedBean applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);}....getBeanPostProcessors方法获取所有的BeanPostProcessors然后遍历调用postProcessBeforeInitialization方法 Overridepublic Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName)throws BeansException {Object result existingBean;for (BeanPostProcessor processor : getBeanPostProcessors()) {Object current processor.postProcessBeforeInitialization(result, beanName);if (current null) {return result;}result current;}return result;}我们可以在该方法的实现中找到自定义的BeanPostProcessor从而实现拓展
其他
拓展点 parseCustomElement