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

珠海门户网站建设费用数码产品网站建设计划书

珠海门户网站建设费用,数码产品网站建设计划书,wordpress编辑器缓慢,怎么查询网站的域名备案后置处理器前言Spring的后处理器BeanFactoryPostProcessor#xff08;工厂后处理器#xff09;执行节点作用基本信息经典场景子接口——BeanDefinitiRegistryPostProcessor基本介绍用途具体原理例子——注册BeanDefinition使用Spring的BeanFactoryPostProcessor扩展点完成自定… 后置处理器前言Spring的后处理器BeanFactoryPostProcessor工厂后处理器执行节点作用基本信息经典场景子接口——BeanDefinitiRegistryPostProcessor基本介绍用途具体原理例子——注册BeanDefinition使用Spring的BeanFactoryPostProcessor扩展点完成自定义注解扫描BeanPostPrecessor (后处理器基本原理运用的场景经典例子——时间日志增强BeanFactoryPostProcessorBeanPostProcessor的不同点结尾前言 Spring的后处理器是Spring对外开发的重要扩展点允许我们介入到Bean的整个实例化流程中来以达到动态注册BeanDefinition动态修改BeanDefinition以及动态修改Bean的作用。 如果你不太清楚BeanDefinition是干嘛的推进你看看我写的另外一篇文章相信可以帮助到你Spring核心模块解析—BeanDifinition。 Spring的后处理器 Sping的后处理器是Spring对外开发的重要扩展点允许我们介入到Bean的整个实例化流程中来以达到动态注册BeanDefinition以及动态修改Bean的作用那么Spring主要有两种后处理器下面我们分别进行介绍他们的基本概念和业务场景。希望你可以更好的理解。 BeanFactoryPostProcessor工厂后处理器 执行节点 在BeanDefinitDefinitionMap填充完毕Bean实例化之前执行。 作用 1.允许我们在Spring容器加载Bean定义之后对Bean定义进行修改从而影响到容器中实际实例化的Bean。 2.主要用途是应用程序上下文准备就绪前修改或添加Bean定义。 3.也可以用来执行自定义的Bean验证或Bean初始化逻辑。 基本信息 beanFactoryPostProcessor是一个接口规范实现了该接口的类只要交由Spring容器管理的话那么Spring就会回调该接口的方法用于对BeanDefinition注册和修改的功能。 FunctionalInterface public interface BeanFactoryPostProcessor {void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;}我们先来关注一下接口里面方法的参数ConfigurableListableBeanFactory 本质来说这个参数其实是BeanFacotry的子接口我们看一下这层关系 public interface ConfigurableListableBeanFactoryextends ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory 然后进入到ListableBeanFactory中 public interface ListableBeanFactory extends BeanFactory 经典场景 业务场景配置文件中的占位符替换为实际值的情况。比如将配置文件中的数据库连接URL用户名和密码等信息替换为实际的值。 经典用途是用它实现属性占位符的解析通过实现BeanFactoryPostProcessor接口并重写postProcessBeanFactory()我们使用Spring的占位符解析机制如${…}来解析Bean定义中的属性占位符并将其替换为实际的属性值。 下面我们来介绍一下代码实现 1.首先在Spring配置文件中定义PropertyPlaceholderConfigurer实例用来解析占位符。 bean classorg.springframework.beans.factory.config.PropertyPlaceholderConfigurerproperty namelocation valueclasspath:jdbc.properties/ /bean上面的配置中PropertyPlaceholderConfigurer实例用于解析jdbc.properties文件中的占位符。 2.实现一个BeanFactoryPostProcessor接口的实现类用于在应用程序上下文准备就绪之前替换Bean定义中的占位符例如 public class PropertyPlaceholderReplacer implements BeanFactoryPostProcessor {Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {// 获取名为 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0 的 PropertyPlaceholderConfigurer 对象// 该对象用于解析配置文件中的占位符并将解析后的值设置回相应的 Bean 定义中PropertyPlaceholderConfigurer configurer (PropertyPlaceholderConfigurer)beanFactory.getBean(org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0);// 获取所有的 Bean 名称String[] beanNames beanFactory.getBeanDefinitionNames();for (String beanName : beanNames) {// 获取 Bean 的定义BeanDefinition beanDefinition beanFactory.getBeanDefinition(beanName);// 获取 Bean 的属性值MutablePropertyValues propertyValues beanDefinition.getPropertyValues();PropertyValue[] propertyValueArray propertyValues.getPropertyValues();for (PropertyValue propertyValue : propertyValueArray) {Object value propertyValue.getValue();// 如果属性值是一个字符串类型那么就将其转换为实际的值if (value instanceof String) {// 调用 PropertyPlaceholderConfigurer 的 convertPropertyValue() 方法将占位符解析为实际的值Object convertedValue configurer.convertPropertyValue((String) value);// 将转换后的值设置回属性值中propertyValue.setConvertedValue(convertedValue);}}}} }3.最后在Spring配置文件中注册PropertyPlaceholderReplacer实例让它参与应用程序上下文创建过程 bean classcom.example.PropertyPlaceholderReplacer/Spring容器启动时PropertyPlaceholderReplacer实例会被创建并自动调用postProcessBeanFactory方法在此方法中实现占位符的解析然后将解析后的实际值设置回相应的Bean定义中。这样应用程序中的占位符就会被正确地替换为实际的值。 子接口——BeanDefinitiRegistryPostProcessor 基本介绍 它是Spring框架的一个扩展点用于对Bean定义的注册过程进行干预和定制。 继承BeanFactoryPostProcessor接口并在其基础上扩展了一个新的方法即postProcessBeanDefinitionRegistry()方法。 用途 在Spring容器初始化时首先会读取应用程序中的配置文件并解析出所有的Bean定义然后将这些Bean定义注册到容器中。 在这个过程中BeanDefinitionRegistryProcessor提供了一种机制允许开发人员在Bean定义注册之前和之后对Bean定义进行自定义处理例如添加修改或删除Bean定义等。 具体原理 具体来说BeanDefinitionRegistryPostProcessor提供了以下两个方法 postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)该方法在所有Bean定义加载完成之后Bean实例化之前被调用允许开发人员对Bean定义进行自定义修改例如添加修改或删除Bean定义等。postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory): 该方法是继承自BeanFactoryPostProcessor接口的方法用于在BeanFactory完成实例化之后对BeanFactory进行后置处理。 那么我们通过BeanDefinitionRegistryPostProcessor接口开发人员可以在Spring容器启动时干预Bean的注册过程从而实现对Bean的自定义处理。 例如 可以通过该接口来动态注册Bean定义从而实现基于注解或者其他方式的自动发现和注册Bean。 同时该接口也提供了一种扩展点允许开发人员在Bean定义注册之后再进行后置处理例如对Bean的属性进行统一设置验证等操作。 例子——注册BeanDefinition BeanDefinitionRegistryPostProcessor接口主要用于注册和修改BeanDefinition。 在postProcessBeanDefinitionRegistry()方法中开发人员可以通过BeanDefinitionRegistry对象注册新的BeanDefinition例如 import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; import org.springframework.beans.factory.support.RootBeanDefinition;/*** 自定义的BeanDefinitionRegistryPostProcessor*/ public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {/*** 重写BeanDefinitionRegistryPostProcessor的postProcessBeanDefinitionRegistry方法*/Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {// 创建一个RootBeanDefinition实例该实例对应的BeanClass是MyBeanRootBeanDefinition beanDefinition new RootBeanDefinition(MyBean.class);// 向BeanDefinitionRegistry注册MyBean的BeanDefinitionregistry.registerBeanDefinition(myBean, beanDefinition);}/*** 重写BeanDefinitionRegistryPostProcessor的postProcessBeanFactory方法*/Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {// do nothing}/*** 自定义的Bean*/public static class MyBean {private String message Hello, World!;public String getMessage() {return message;}public void setMessage(String message) {this.message message;}} }在应用程序的Spring配置文件中我们可以通过下面的方式来注册MyBeanDefinitionRegistryPostProcessor bean classcom.example.MyBeanDefinitionRegistryPostProcessor/在容器启动时Spring会自动检测到MyBeanDefinitionRegistryPostProcessor并将其实例化和注册到容器中。在容器启动完成后我们的myBean就可以在容器中被其他的Bean所依赖和使用了。 后面针对这个执行顺序我们引用一个图来说明相信看到这你就明白啦 你以为到这就结束啦吗咱们No再来一个Demo收尾 使用Spring的BeanFactoryPostProcessor扩展点完成自定义注解扫描 ——todo晚上回宿舍补上 BeanPostPrecessor (后处理器 Bean实例化之后到最终缓存到名为singletonObjects的单例池之前中间会经过Bean的初始化过程。例如属性的填充初始化init的执行等其中有一个对外进行扩展的点BeanPostProcessor它允许在Bean的初始化流程中插入自定义的逻辑。我们称之为BeanPostProcessor会在流程节点上被Spring自动调用。 基本原理 它定义了两个方法 postProcessBeforeInitialization(Object bean, String beanName)在 Bean 初始化之前调用。 postProcessAfterInitialization(Object bean, String beanName)在 Bean 初始化之后调用。 我们可以通过实现BeanPostProcessor接口并将其注册到Spring容器中来实现对Bean初始化过程的控制和定制。 在这两个方法中我们可以根据需要对Bean进行一些自定义操作例如修改属性值注入依赖动态代理等等。 在 Spring 容器启动的过程 1.当一个 Bean 被实例化后Spring 容器会按照一定的顺序调用注册在容器中的所有 BeanPostProcessor 实现的postProcessBeforeInitialization 方法 2.然后调用 Bean 的 init 方法最后再按照相反的顺序调用所有 BeanPostProcessor 实现的 postProcessAfterInitialization 方法。 这个过程中BeanPostProcessor 扮演着一个监听器的角色允许开发人员在 Bean 初始化的过程中干预和修改 Bean 的行为从而实现对 Spring 容器的定制和扩展。 运用的场景 日志记录 可以使用BeanPostProcessor来实现在Bean实例化后、初始化前后打印日志从而实现记录Bean生命周期的目的。 数据库连接管理 可以使用BeanPostProcessor来在Bean实例化后、初始化前后获取并设置数据库连接从而实现数据库连接的管理和复用。 安全检查 可以使用BeanPostProcessor来实现在Bean实例化后、初始化前后对Bean的属性进行安全检查例如检查是否有不安全的属性或敏感的数据从而保证系统的安全性。 AOP面向切面编程 可以使用BeanPostProcessor来在Bean实例化后、初始化前后进行动态代理从而实现AOP编程例如实现事务控制、日志记录等功能。 自定义注解 可以使用BeanPostProcessor来实现在Bean实例化后、初始化前后扫描并解析自定义注解从而实现自定义注解的功能。例如可以在Bean实例化后、初始化前后扫描并解析所有的MyAnnotation注解并根据注解的内容进行相应的操作。 经典例子——时间日志增强 要求 Bean的方法执行之前控制台打印当前时间。Bean的方法执行之后控制台打印当前时间。 分析对方法进行增强主要是代理设计模式和包装设计模式由于Bean方法不确定所以使用动态代理在运行期间执行增强操作在Bean实例创建完毕后进入到单例池之前使用Proxy代替真正的目标Bean。 ——todo晚上回宿舍补上 最后梳理一下如果你前面耐心看完这张图不用多解释了一看就明白了 BeanFactoryPostProcessorBeanPostProcessor的不同点 BeanFactoryPostProcessor是Spring容器中用于在Bean定义加载到容器后、实例化之前对Bean的定义进行修改和扩展的扩展点。 它可以通过实现BeanFactoryPostProcessor接口来注册自己的处理逻辑对所有的Bean定义进行修改和扩展包括修改Bean的属性值、修改Bean的依赖关系、注册新的Bean定义等等。 通常情况下我们可以使用BeanFactoryPostProcessor来实现一些与Bean定义相关的操作例如通过解析外部配置文件动态修改Bean的属性值、实现Bean依赖的自动装配、注册新的Bean定义等等。 BeanPostProcessor是Spring容器中用于在Bean实例化后、初始化前后对Bean进行自定义处理的扩展点。 它可以通过实现BeanPostProcessor接口来注册自己的处理逻辑对所有的Bean实例进行修改和扩展包括修改Bean的属性值、动态代理Bean、实现AOP编程、记录日志等等。 通常情况下我们可以使用BeanPostProcessor来实现一些与Bean实例相关的操作例如实现Bean的自定义初始化逻辑、记录Bean的生命周期、实现Bean的动态代理等等。 结尾 这块知识无论是学Bean的生命周期还是刷新逻辑都很重要希望你可以学会如果有哪些地方觉得总结的不好欢迎留言。
http://www.w-s-a.com/news/688196/

相关文章:

  • 如何用dw做网站设计设计头条
  • 网站建设基础及流程北京商场购物中心排名
  • 青州市城乡建设局网站自建网站步骤
  • wordpress文章延迟加载优化设计答案四年级上册语文
  • 做网站源码要给客户嘛怎么在运行打开wordpress
  • 北海住房和城乡建设局网站wordpress标题去掉私密
  • 织梦网站安装视频做网站都有那些步骤
  • 网站空间大小选择沈阳微信网站制作
  • 网站分享对联广告网站结构的类型
  • 三维家是在网站上做还是在app上北京网站建设 专业10年
  • 模拟网站建设网站建设认准猪八戒网
  • godaddy网站建设教程微信手机网站搭建
  • 网站建设 商城淄博网站制作哪家好
  • 廊坊手机网站团队国际贸易进口代理公司
  • 运用django做网站网站建设问题及解决办法
  • 商丘企业网站服务c mvc 网站开发
  • 太仓建设工程网站广州seo排名外包
  • 成都的教育品牌网站建设做网站不给提供ftp
  • 建站行业市场人力管理系统
  • qq钓鱼网站在线生成器google关键词搜索工具
  • 化妆网站模板移动网站建设模板
  • 欢迎访问语文建设杂志网站网站蓝色配色
  • 最新网站发布重庆城乡建设部网站首页
  • 网站建设费用高鄂尔多斯seo
  • dw做网站怎么发布网站无后台可以上框架
  • 网络公司如何建网站网站的建设需要多少钱
  • 代刷网站推广快速泉州网页定制
  • 网站优秀网站地址做宣传册的公司
  • 苏州高端网站建设咨询wordpress云图插件
  • 河北省建设厅网站重新安装优秀中文网页设计