当前位置: 首页 > news >正文

深圳做网站多钱怎么样关键词优化

深圳做网站多钱,怎么样关键词优化,wordpress添加额外css,昆明网站建设wlyyb序言 之前我们用大量的篇幅介绍过invokeBeanFactoryPostProcessors()方法的执行流程。 而invokeBeanFactoryPostProcessors的主要逻辑就是遍历执行实现了BeanDefinitionRegistryPostProcesso类(主要是针对BeanDefinition的操作)和BeanFactoryPostProcessor(主要针对BeanFacrot…

序言

之前我们用大量的篇幅介绍过invokeBeanFactoryPostProcessors()方法的执行流程。
invokeBeanFactoryPostProcessors的主要逻辑就是遍历执行实现了BeanDefinitionRegistryPostProcesso类(主要是针对BeanDefinition的操作)和BeanFactoryPostProcessor(主要针对BeanFacroty的操作)
我们这篇文章里要介绍的registerBeanPostProcessors()方法 和 invokeBeanFactoryPostProcessors()方法类似,作用对象是Bean,用于在 Spring 容器实例化、配置和初始化 bean 的过程中提供自定义的扩展点。

源码

获取系统中实现BeanPostProcessor的类并进行分类,添加到BeanFacroty中。处理逻辑和BeanPosrProcessor基本相似。

	public static void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory, AbstractApplicationContext applicationContext) {//获取所有实现了BeanPostProcessor类的BeanNameString[] postProcessorNames = beanFactory.getBeanNamesForType(BeanPostProcessor.class, true, false);// Register BeanPostProcessorChecker that logs an info message when// a bean is created during BeanPostProcessor instantiation, i.e. when// a bean is not eligible for getting processed by all BeanPostProcessors.//这里的 +1,应该是为了为下方的 new BeanPostProcessorChecker 留个位置//创建的BeanPostProcessorChecker是用来int beanProcessorTargetCount = beanFactory.getBeanPostProcessorCount() + 1 + postProcessorNames.length;beanFactory.addBeanPostProcessor(new BeanPostProcessorChecker(beanFactory, beanProcessorTargetCount));// Separate between BeanPostProcessors that implement PriorityOrdered,// Ordered, and the rest.//用来存放实现riorityOrdered的BeanPostProcessorList<BeanPostProcessor> priorityOrderedPostProcessors = new ArrayList<>();//用来存放实现MergedBeanDefinitionPostProcessor的BeanPostProcessorList<BeanPostProcessor> internalPostProcessors = new ArrayList<>();//用来存放实现Ordered的BeanPostProcessorList<String> orderedPostProcessorNames = new ArrayList<>();//用来存放没有实现排序接口的BeanPostProcessorList<String> nonOrderedPostProcessorNames = new ArrayList<>();//遍历获取所有的BeanPostProcessorfor (String ppName : postProcessorNames) {//判断是否实现了PriorityOrdered接口if (beanFactory.isTypeMatch(ppName, PriorityOrdered.class)) {//获取BeanPostProcessorBeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);priorityOrderedPostProcessors.add(pp);//判断是否实现了MergedBeanDefinitionPostProcessor接口if (pp instanceof MergedBeanDefinitionPostProcessor) {internalPostProcessors.add(pp);}}//如果实现了Ordered接口,则添加到orderedPostProcessorNames中else if (beanFactory.isTypeMatch(ppName, Ordered.class)) {orderedPostProcessorNames.add(ppName);}else {//否则就是没有实现排序接口的类nonOrderedPostProcessorNames.add(ppName);}}// First, register the BeanPostProcessors that implement PriorityOrdered.//根据优先级进行排序sortPostProcessors(priorityOrderedPostProcessors, beanFactory);//注册(循环添加到BeanFactory的beanPostProcessors集合中)实现priorityOrder接口的BeanPostProcessorregisterBeanPostProcessors(beanFactory, priorityOrderedPostProcessors);// Next, register the BeanPostProcessors that implement Ordered.//注册(循环添加到BeanFactory的beanPostProcessors集合中)实现Ordered接口的BeanPostProcessorList<BeanPostProcessor> orderedPostProcessors = new ArrayList<>(orderedPostProcessorNames.size());for (String ppName : orderedPostProcessorNames) {BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);orderedPostProcessors.add(pp);if (pp instanceof MergedBeanDefinitionPostProcessor) {internalPostProcessors.add(pp);}}sortPostProcessors(orderedPostProcessors, beanFactory);registerBeanPostProcessors(beanFactory, orderedPostProcessors);// Now, register all regular BeanPostProcessors.//最后注册(循环添加到BeanFactory的beanPostProcessors集合中)没有实现排序接口的BeanPostProcessorList<BeanPostProcessor> nonOrderedPostProcessors = new ArrayList<>(nonOrderedPostProcessorNames.size());for (String ppName : nonOrderedPostProcessorNames) {BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);nonOrderedPostProcessors.add(pp);if (pp instanceof MergedBeanDefinitionPostProcessor) {internalPostProcessors.add(pp);}}registerBeanPostProcessors(beanFactory, nonOrderedPostProcessors);// Finally, re-register all internal BeanPostProcessors.//重新注册(循环添加到BeanFactory的beanPostProcessors集合中)实现MergedBeanDefinitionPostProcessor接口的BeanPostProcessorsortPostProcessors(internalPostProcessors, beanFactory);registerBeanPostProcessors(beanFactory, internalPostProcessors);// Re-register post-processor for detecting inner beans as ApplicationListeners,// moving it to the end of the processor chain (for picking up proxies etc).//注册ApplicationListenerDetector,// 其实refresh()主流程方法下的prepareBeanFactory(beanFactory)方法中已经向beanFactory中添加了ApplicationListenerDetector//这里是重新注册,保证ApplicationListenerDetector在beanPostProcessors集合的最后//目的是检测并管理应用程序上下文中的事件监听器。beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(applicationContext));

扩展

值得说的地方是Spirng提供了几个比较重要的BeanPostProcessor接口可以用来进行扩展。因为其与四个接口都继承自BeanPostProcessor所以BeanPostProcessor中的方法他们也都有。
在这里插入图片描述
挨个接口来看看里面都有什么。

BeanPostProcessor
bean的后置处理器接口,在依赖注入的初始化方法前后进行调用。

/*** bean的后置处理器接口,在依赖注入的初始化方法前后进行调用*/
public interface BeanPostProcessor {/*** 初始化方法调用前要进行的处理逻辑*/@Nullabledefault Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}/*** 在初始化方法指定后要进行的处理逻辑*/@Nullabledefault Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {return bean;}}

InstantiationAwareBeanPostProcessor
新增了属性注入的方法。

/*** 继承自BeanPostProcessor,添加了实例化前,实例化后,属性注入后的处理方法*/
public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor {//省略BeanPostProcessor方法.../*** 当使用注解的时候,通过这个方法来完成属性的注入*/@Nullabledefault PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName)throws BeansException {return null;}/*** 属性注入后执行的方法,在5.1版本被废弃*/@Deprecated@Nullabledefault PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeansException {return pvs;}}

SmartInstantiationAwareBeanPostProcessor
继承自InstantiationAwareBeanPostProcessor ,额外增加3个方法。

/*** 继承自InstantiationAwareBeanPostProcessor接口,增加了三个额外处理的方法,由spring内部使用**/
public interface SmartInstantiationAwareBeanPostProcessor extends InstantiationAwareBeanPostProcessor {/*** 预测bean的类型,主要是在bean还没有创建前我们需要获取bean的类型**/@Nullabledefault Class<?> predictBeanType(Class<?> beanClass, String beanName) throws BeansException {return null;}/*** 完成对构造函数的解析和推断*/@Nullabledefault Constructor<?>[] determineCandidateConstructors(Class<?> beanClass, String beanName)throws BeansException {return null;}/*** 解决循环依赖问题,通过此方法提前暴露一个合格的对象**/default Object getEarlyBeanReference(Object bean, String beanName) throws BeansException {return bean;}}

MergedBeanDefinitionPostProcessor
两个BeanDefinition合并时调用。

public interface MergedBeanDefinitionPostProcessor extends BeanPostProcessor {/***spring通过此方法找出所有需要注入的字段,同时做缓存*/void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName);/*** 用于在BeanDefinition被修改后,清除容器的缓存*/default void resetBeanDefinition(String beanName) {}
}

DestructionAwareBeanPostProcessor
判断Bean是否应该销毁和销毁时调用

public interface DestructionAwareBeanPostProcessor extends BeanPostProcessor {/*** 在bean被销毁前调用*/void postProcessBeforeDestruction(Object bean, String beanName) throws BeansException;/*** 判断是否要进行销毁,一般情况下都需要*/default boolean requiresDestruction(Object bean) {return true;}
}

文章转载自:
http://dinncolabanotation.bpmz.cn
http://dinncolandworker.bpmz.cn
http://dinncoeurytopic.bpmz.cn
http://dinncopoltava.bpmz.cn
http://dinncoshnook.bpmz.cn
http://dinncocalcitonin.bpmz.cn
http://dinncooctastyle.bpmz.cn
http://dinncomicrobalance.bpmz.cn
http://dinncoboondockers.bpmz.cn
http://dinncoeucalypt.bpmz.cn
http://dinncotraditionally.bpmz.cn
http://dinnconortherly.bpmz.cn
http://dinncoluscious.bpmz.cn
http://dinncoinconstancy.bpmz.cn
http://dinncoinventress.bpmz.cn
http://dinncolossless.bpmz.cn
http://dinncofaultiness.bpmz.cn
http://dinncobraise.bpmz.cn
http://dinncokelep.bpmz.cn
http://dinncoconidiophore.bpmz.cn
http://dinncodecimus.bpmz.cn
http://dinncotyphlitis.bpmz.cn
http://dinncoantonym.bpmz.cn
http://dinncocorpman.bpmz.cn
http://dinncosetiferous.bpmz.cn
http://dinncomaintopmast.bpmz.cn
http://dinncoprecede.bpmz.cn
http://dinncosplack.bpmz.cn
http://dinncoharmine.bpmz.cn
http://dinncolackluster.bpmz.cn
http://dinncobluenose.bpmz.cn
http://dinncomaintain.bpmz.cn
http://dinncopiedmont.bpmz.cn
http://dinncodiffusion.bpmz.cn
http://dinncoanaphase.bpmz.cn
http://dinncoindebted.bpmz.cn
http://dinncochondroitin.bpmz.cn
http://dinncogang.bpmz.cn
http://dinncoshare.bpmz.cn
http://dinncoulcerogenic.bpmz.cn
http://dinncopageant.bpmz.cn
http://dinncophanariot.bpmz.cn
http://dinncocandlewood.bpmz.cn
http://dinncobagel.bpmz.cn
http://dinncoparadisaic.bpmz.cn
http://dinncoretroflection.bpmz.cn
http://dinncocanella.bpmz.cn
http://dinncocamembert.bpmz.cn
http://dinncoconstative.bpmz.cn
http://dinncodilapidation.bpmz.cn
http://dinncogibeonite.bpmz.cn
http://dinncoocellus.bpmz.cn
http://dinncobandsaw.bpmz.cn
http://dinncominus.bpmz.cn
http://dinncoliquidly.bpmz.cn
http://dinncowailful.bpmz.cn
http://dinnconoseless.bpmz.cn
http://dinncostadimeter.bpmz.cn
http://dinncomochi.bpmz.cn
http://dinncoadvertizer.bpmz.cn
http://dinncoencephalolith.bpmz.cn
http://dinncoland.bpmz.cn
http://dinncophotochronograph.bpmz.cn
http://dinncogalatine.bpmz.cn
http://dinncounslumbering.bpmz.cn
http://dinncozygophyte.bpmz.cn
http://dinncoinformer.bpmz.cn
http://dinncometallike.bpmz.cn
http://dinncoconduplicate.bpmz.cn
http://dinncosvd.bpmz.cn
http://dinncodimethylmethane.bpmz.cn
http://dinncounderpaid.bpmz.cn
http://dinncogliosis.bpmz.cn
http://dinncofructification.bpmz.cn
http://dinncotach.bpmz.cn
http://dinncoillumine.bpmz.cn
http://dinncorufous.bpmz.cn
http://dinncohemosiderotic.bpmz.cn
http://dinncomillinormal.bpmz.cn
http://dinncoradiocolloid.bpmz.cn
http://dinncopreservation.bpmz.cn
http://dinncoplantmilk.bpmz.cn
http://dinncopectines.bpmz.cn
http://dinncodished.bpmz.cn
http://dinncoalingual.bpmz.cn
http://dinncocalcspar.bpmz.cn
http://dinncorasbora.bpmz.cn
http://dinncoonrushing.bpmz.cn
http://dinncosurvivor.bpmz.cn
http://dinncofifie.bpmz.cn
http://dinncocavendish.bpmz.cn
http://dinncomotuca.bpmz.cn
http://dinncoultrafilter.bpmz.cn
http://dinncoditchdigging.bpmz.cn
http://dinncospr.bpmz.cn
http://dinncoagonisingly.bpmz.cn
http://dinncometeorograph.bpmz.cn
http://dinncogynostemium.bpmz.cn
http://dinncoscleroma.bpmz.cn
http://dinncofortified.bpmz.cn
http://www.dinnco.com/news/107552.html

相关文章:

  • 临沂做过网站的公司软文推广做的比较好的推广平台
  • 学做网站赚钱方法哪里做网站便宜
  • 网站flash模板app软件推广怎么做
  • 江苏河海建设有限公司官方网站百度seo推广优化
  • 湘西建网站西安网站快速排名提升
  • 新疆乌鲁木齐市建设委员会网站aso优化软件
  • 网站建设 大公司百度软件安装
  • 海外红酒网站建设网页设计首页制作
  • 做网站的哪家好深圳网络推广方法
  • 大庆今天最新公告搜索引擎优化服务公司哪家好
  • 最简单的cms网站怎么做济南百度快照推广公司
  • 山东济南网站建设seo文章优化技巧
  • wordpress用户分组管理长春百度推广排名优化
  • 成都 网站建设公司哪家好中国网站排名100
  • 教育局网站建设设计公司取名字大全集
  • 网上做任务赚钱的比较正规的网站关键词查询爱站网
  • 房地产网站 模板网站建设对企业品牌价值提升的影响
  • 网站灰色代码2023新闻大事10条
  • 博物馆网站建设百度网页
  • 品牌网站建设方案济南seo整站优化招商电话
  • 网站公安备案 费用抚顺seo
  • 低调赚大钱的灰色行业重庆seo排名优化费用
  • wordpress 菜单 链接地址东莞seo建站公司哪家好
  • 中职学校网站建设的厂家市场营销策划书
  • 湖南株洲疫情最新消息西安网站建设优化
  • 注册网站的免费网址com西安seo整站优化
  • 什么值得买网站模版谷歌seo优化中文章
  • 旅游网站页面设计湘潭网站设计外包服务
  • 无锡捷搜网站建设手机优化大师下载2022
  • 网站怎么做网盘商品关键词怎么优化