您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

为什么Spring框架如此重要?

2022/12/16 3:23:36发布51次查看
为什么spring框架如此重要?
作者:王冰公开号:封神新秀
作为一个优秀的企业级应用框架,spring为企业开发过程中最基本的功能提供了支持,如事务、切面、web支持、数据库支持、orm、oxm等。然而,它不仅提供了这些基本功能,还为开发人员留下了许多扩展点。用户可以使用这些扩展点随意添加他们想要的其他功能,这就是spring开放封闭原则的本质。例如,一些常见的企业中间件,如dubbo、jsf、mybatis或springcloud(近年来流行的微服务框架)等。,都有从spring提供的扩展点扩展而来的新功能。那么春季经常使用哪些扩展点呢?生化全球最新章节
1.扩展原则spring函数扩展的前提是它将对象创建和容器初始化的过程细分为许多步骤[这些步骤称为容器声明周期和bean声明周期],因此如果不这样做,可以直接使用new关键字创建一个对象,最多两个步骤[首先创建新对象,然后设置属性]就结束了,所以不会有扩展。在spring中,提供了一些特殊的接口,它们有一个特点。它们将在容器初始化或bean实例化过程中的某个时间点被调用(例如,bean定义被加载,bean实例化前后,bean初始化前后),从而完成功能扩展,并且用户定义的处理逻辑可以在某个时间点被插入,这是spring的扩展原理。
2.原始扩展点这里的原始扩展点是指原始接口或抽象类,没有任何其他父接口或父类。常见的扩展点如下。
2.1、beanfactorypostprocessor
(1)扩展点法
spring扩展点方法(2)扩展点的执行时间这个扩展点是beanfactory的后处理器,它的执行时间是在bean定义被完全解析和加载之后(加载之后,它意味着bean定义已经被放置在bean定义注册表beandefinitonmap中),但是它将在bean实例化之前被执行。具体来说,在spring容器的初始化上下文中,执行刷新方法的第5步,即:
这个扩展点的功能使用这个扩展点,您可以在实例化bean实例之前修改bean定义信息。例如,修改bean的类型、修改bean的范围、是否是惰性加载、参与自动装配或修改bean的工厂方法等。[在spring中,bean定义是一种专门用来描述bean的结构,它包含了bean信息的所有方面,并且是在创建bean实例和初始化bean的过程中根据bean定义中的信息完成的]。(4)使用扩展点的示例
配置类extconfig
配置类自定义bean工厂后处理器
定制bean后处理器测试类testmain
这样,测试类testmain从容器中获得的人就是使用修改后的bean定义创建的对象。
2.2、后处理器
(1)扩展点的方法
扩展点的方法(2)扩展点的执行时机
扩展点是一个与bean相关的接口,主要用于拦截bean的创建。该接口包括两种扩展方法,后处理前xxx和后处理后xxx。
执行时间:spring实例化bean并填充属性后,在执行初始化方法之前执行。[这里有两种主要的初始化方法:①使用初始化方法指定的方法;②由bean实例从initializingbean接口实现的afterpropertiesset方法。
执行时间:它将在spring完成初始化方法后执行。如果当前bean需要生成代理(aop和声明性事务将在这一步中为目标bean对象生成代理对象),它将在这一步中生成。
(3)扩展点的功能
因为扩展点是在bean实例化完成后执行初始化方法之前和之后调用的。因此,您可以使用这个扩展点来检查一些特定的身份,例如判断它是否实现了一个自定义接口,然后对bean对象执行一些自定义操作。或者包装生成的对象,生成代理对象,等等。
(4)用例子
直接定制处理器,实现后处理器接口,然后实现相应的后处理方法。
自定义bean后处理2.3和应用程序侦听器
spring为事件驱动开发提供了一个扩展点。开发人员可以将用户定义的事件发布到容器中,并在事件发生后触发操作。
(1)扩展点的方法
扩展点的方法(2)扩展点的执行时机
当容器发布默认刷新事件时,将触发自定义事件来执行。此时,容器中的所有单实例bean都已创建。
(3)扩展点的作用
在容器中的所有单个实例bean被创建之后,您可以执行一些自定义操作,比如启动一个后台线程。例如,在springcloud中,嵌入式web容器是在容器发布事件时启动的,并且有一些rpc服务框架,它们也可以在事件的回调方法中发布或注册服务接口。
(4)使用扩展点的示例
(1)配置类extconfig
配置类extconfig②自定义事件的实现
自定义事件的实现③测试类
在容器刷新过程中,测试类testmain首先在容器中注册一个事件调度器,它实际上用于执行事件回调。然后,在调用publishevent之后,底层将使用时间调度器来调度事件,即执行事件的回调方法。
3.派生扩展点
3.1、实例化仓库后处理器
(1)扩展点的方法
扩展点是从bean后处理器接口继承来的,所以它本质上也是bean的后处理器,只是接口中有一些特殊的方法,如下所示:
扩展点的方法这个扩展点是bean后处理器的一个子接口,它将在bean实例化之前和填充属性的过程中被调用。具体时间安排如下:
①后处理前实例化:在实例化前调用,可以实现直接返回定制的bean通过使用定制逻辑;
②后处理方法:在bean对象被实例化之后,普通属性被填充之前调用。[普通属性初始化可以理解为用@autowired或@resource标记的属性的初始化。依赖注入实际上是这个普通属性的初始化,它可以基于属性的类型或名称];
③后处理属性:在普通属性被填充后调用,可以完成该方法中一些自定义属性的依赖注入,如自定义注释的解析和注入。
3.2、智能实例化软件后处理器
这个接口是实例化仓库bean后处理器的一个子接口,它提供了一个构造函数来推断bean的类型和给定bean使用的构造函数。
(1)扩展点法
延长积分的方法(2)执行机会
①预测bean类型:此方法将在初始化所有单实例bean的过程中执行,这将用于推断bean的类型并确定它是否是工厂bean,也就是说,它将在isfactorybean方法中执行。简单的调用链如下:
调用链②确定构造函数:在bean实例化的过程中,这个方法将被用来推断创建bean时可以使用的构造函数。推理之后,将选择合适的构造函数来创建bean实例。
③ getearlybeanreference:这个方法将在bean实例化完成之后、属性被填充之前调用,以获取在实例化过程中正在创建的早期对象,它是一个单一的实例,允许循环依赖,然后将它放入早期对象缓存,解决循环依赖问题。
3.3、实例化仓库后处理器
这个接口是上面3.2中的一个抽象实现类[类名太长...省略],它是后处理器的适配器。它提供了上述3.1、3.2和2.1中的所有方法,并提供了默认的空实现。如果您不确定需要扩展的函数,建议扩展类直接继承这个类,并且可以随时重写其他方法。具体方法列表如上2.1。
3.4、合并定义启动处理器
该接口是bean后置处理器的一个子接口,用于处理合并后的bean定义。
(1)扩张的方法
延长积分的方法(2)执行机会
①后处理合并定义:该方法将在bean实例化对象之后、填充属性之前调用。例如,用于处理诸如@自动连线、@值、@资源等注释的后处理器基本上实现了这个接口。在这种方法中,用诸如@autowired、@value、@resource之类的注释标记的属性被预处理,然后被解析成注释元数据,该元数据然后被放入高速缓存中用于随后的依赖注入。
②resetbeadefinition:在bean定义被解析并注册到bean定义注册表后,将调用此方法。如果在bean定义中心有一个当前bean名称相同的bean,这个方法将被用来删除重复的bean定义。
3.5 .这个后处理器也是后处理器的一个子接口,它作用于一个特定的bean。如果bean对象实现了disposablebean接口,则在容器关闭之前,将回调接口的destruction方法,并在destruction方法中回调后处理前销毁方法,以执行bean销毁之前的善后工作。例如,关闭以释放一些系统资源,关闭一些服务,等等。
(1)扩展点法
延长积分的方法(2)执行机会
①后处理前销毁:当执行spring容器的关闭方法时,容器中需要销毁的bean实例(需要销毁是指在创建bean时requiresdestruction方法的返回值为真)将被取出,然后依次调用bean实例的遇险方法,在遇险方法中调用后处理方法。
②要求销毁:在bean初始化完成后,如果bean实现了销毁...接口并重写此方法,将调用此方法,并且根据此方法的返回值,将判断bean是否需要放入需要销毁的映射集中。
4.内置重要的后处理器
4.1、配置类后处理器
这个后处理器是在spring中处理javaconfig的核心后处理器,在其后处理方法中,它将解析如下常见的注释:
@configuration:将当前类标记为配置类
@import:快速将组件导入容器
@导入资源:快速导入配置文件
@order:标记bean的优先级,用于定义bean的排序
@ components scan:配置包扫描,可以配置多个包
@propertysource:导入属性配置文件,您可以导入多个
以及导入选择器和导入bean定义注册器接口的实现类。
4.2、通用注释后处理器
后处理器用于处理自动装配和初始化方法以及销毁方法的一些注释,如以下注释:
@resource:用于通过bean名称完成依赖注入。
@predestroy:标记在方法上,用于指定bean的销毁方法
@ postconstruct:标记在方法上以指定初始化方法,该方法将在bean实例化并填充属性后被调用。
注意:在项目中,如果使用spring xml来配置bean,以下配置将自动将后处理器导入到容器中:[xml中某些配置的特定功能]
&lt。上下文:annotation-config&gt。或者:
4.3、autowiredannotationbeanstreator
用于处理spring自己的一些注释和jsr-330中的注释支持,常见的如下:
@autowired:用于按类型完成依赖注入
@value:用于完成属性值的注入,通常用于分析属性配置文件中的值
@ inject:jsr-330中提供的注释也用于完成依赖注入,使用它时需要导入第三方jar包
注意:如果您使用spring的xml,在spring的xml配置文件中,以下配置将把后处理器导入到容器中:[xml中某些配置的特定功能]
&lt。上下文:annotation-config&gt。或者:
4.4、事件列表器方法处理器
主要用于在事件驱动开发中处理@eventlistener的注释。如果注释用于标记组件的方法,如果方法的输入类型与自定义事件的输入类型相同,则修改后的事件将自动注入组件。当事件在容器中发布时,组件的方法将被调用,这不容易描述。让我们举一个简单的例子如下:
配置类事件配置
配置事件配置类以自定义事件测试事件
用户定义的测试事件测试组件测试组件
自定义测试组件测试类testmain
测试类testmain运行后,会发现在发布testevent事件后,testcomponent中的测试方法会立即监控事件并输出特定的事件,如下所示:
测试事件被调用...测试事件{ text = & # 39试验...& # 39;{}
到目前为止,spring中的公共扩展点和一些重要的内置后处理器已经被引入。当然,在春天有更多的这些扩展点,而且还有更多!因为本文不支持代码格式,所以您需要了解更多关于spring源代码的信息,您可以转到& # 34;新手封神& # 34;公开号,定期分享春源文章!
文章来源:www.atolchina.com
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product