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

花生壳做的网站稳定吗网站后台添加编辑器

花生壳做的网站稳定吗,网站后台添加编辑器,长春建设平台网站的公司,深圳公司广告片制作序言 之前我们用大量的篇幅介绍过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的BeanPostProcessorListBeanPostProcessor priorityOrderedPostProcessors new ArrayList();//用来存放实现MergedBeanDefinitionPostProcessor的BeanPostProcessorListBeanPostProcessor internalPostProcessors new ArrayList();//用来存放实现Ordered的BeanPostProcessorListString orderedPostProcessorNames new ArrayList();//用来存放没有实现排序接口的BeanPostProcessorListString 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接口的BeanPostProcessorListBeanPostProcessor 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集合中)没有实现排序接口的BeanPostProcessorListBeanPostProcessor 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版本被废弃*/DeprecatedNullabledefault 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://www.hkea.cn/news/14339738/

相关文章:

  • 医疗整形网站怎么做经营一个小型app多少钱
  • 一条龙建站开个免费的网站多少钱
  • 网站sem优化怎么做网站突然消失了
  • 搬家网站模板自助建站系统哪个好用
  • 贸易公司寮步网站建设哪家好佛山网站建设联系电话
  • 网站php怎么做太原制作网站的公司哪家好
  • 安康手机网站建设郑州网站建设工作室
  • 网站建设公司哪家好 该如何选择新建的网站怎么做seo优化
  • 网站建设短信用凡科做网站要钱吗
  • 像wordpress一样的网站吗wordpress项目下载文件
  • 做夜夜做网站网站建设-搜遇网络
  • 网站推广要怎样做女同性怎么做的视频网站
  • 烟台 网站建设多少钱电商运营培训多少钱
  • 网站建设怎么在图片上加字如何看网站的版本号
  • 巴中区建设局网站网络营销案例2022
  • 做logo有哪些网站在线自助设计平台
  • 银川网站建设nx110扬州建设教育信息网站
  • 上海专业网站建设价格低如何提升seo
  • 建网站的公司不肯签合同建立网站的作用
  • 网站没有流量怎么办二手车 东莞网站建设
  • 自己做的网站 360不兼容北京制作网站公司排名
  • 建站网址什么意思代理东莞网站制作公司
  • 建水网站开发天津网站建站
  • 长沙网站优化推广店铺网站域名怎么做
  • 深圳自建站网站平台类网站制作公司
  • 做电影网站涉及的侵权问题企业产品网络推广
  • 微信页面设计网站佛山网络公司推荐
  • 国外建站程序网站域名过户
  • 制作网站的模板免费下载东莞网络推广招聘
  • 网站怎么做百度排名崇文网站建设