当前位置: 首页 > 网络应用技术

春季总结,从基础源代码的角度进行了总结,并了解春季ren du的第二个脉冲

时间:2023-03-09 10:25:38 网络应用技术

  []()

  Spring是一个开源框架,Spring是一个轻巧的Java开发框架。它是为了解决企业应用程序开发的复杂性而创建的。该框架的主要优势是其分层体系结构。分层体系结构允许用户选择要使用的组件,同时为开发J2EE应用程序提供了一个集成框架。Spring使用基本的Javabean来完成EJB可以完成的工作。弹簧不仅限于服务器的开发。从简单性,可检验性和松动的视角,任何Java应用程序都可以从Spring中受益。弹簧的核心是控制逆转(IOC)并面对切割表面(AOP)简而

  主模块:

  1. Spring通过DI,AOP和消除模型代码简化了企业 - 级别的Java开发

  2.在弹簧框架之外的核心框架上,还有一个巨大的生态系统。它将弹簧扩展到不同的领域,例如Web服务,休息,移动开发和NOSQL

  3.低入侵设计,代码的污染极低

  4.独立的应用程序服务器,基于春季框架的应用程序,可以真正实现一个写作的承诺,在任何地方运行

  5. Spring的IOC容器降低了业务对象更换的复杂性,并改善了组件之间的脱钩

  6. Spring的AOP允许一些通用任务,例如安全,事务,日志等,以提供集中的处理,从而提供更好的重复使用

  7. Spring's Orm和Dao提供了与第三次耐用框架的良好集成,并简化了底层的数据库访问

  8.春季是高度开放的,并且不强制性应用完全取决于春季。开发人员可以自由选择零件或所有弹簧框架。

  控制逆转是应用程序本身的应用和维护,依靠对象是不负责任的。依赖对象的创建和维护负责外部容器。这样,将应用程序传输到外部容器。控制的转移是控制反转。

  依赖注射指的是:在程序操作期间,因对象由外部容器动态注入组件,例如:常规,通过构造函数或设置器将其注入。

  弹簧核接口

  BeanFactory Top -Level Core界面,标准化的子品质,生产的Bean BeanDefinition封装了所有内容,以产生Bean方法

  春季IOC,豆类生命周期

  春季膨胀点

  是根据我们的程序员本身的需要扩展弹簧的底层

  BeanFactoryPostProcessor Bean Factory后处理器(可用于修改bean定义)

  9豆的后处理器

  1.将Spring的项目源代码直接放置为编译。

  (AbstractApplicationContext#获取FRESHBEANFACTORY)

  3.创建豆厂

  4.加载定义为beandefinitionmap的豆

  5.致电Bean Factory的后处理器:InvokeBeanFactoryPostProcessors()

  org.springframework.context.support.abstractapplicontext

  org.springframework.beans.factory.support.defaultlistablebeanfactory

  6.确定它是否符合生产标准(是否是抽象的,懒惰的加载,单数)> org.springframework.beans.factory.support.support.abstractbeanfactory#dogetBean

  7.真实的生产豆,转到单打池以获取是否已创建。如果创建了,它将直接返回。如果不是单打池,则需要重新创建(为了求解循环依赖项,将当前的bean添加到正在创建的徽标中。SingletonScurrantyCorrantyIncreation)> org.springframework.beans.beans.beans.factory.support.support.abstractbeanfactory.abstractbeanfactory#createbean

  8.您可以使用Bean的后处理器直接返回自定义Bean实例

  org.springframework.beans.factory.support.abstractowirecapanfactory#docreatebean

  9.致电docreatebean开始创建bean> org.springframework.beans.factory.support.abstractowirecapanfactory

  10.立即豆(通过工厂方法,供应商,豆后处理器:

  smartintantantawarebeanpostprocessor.determinecandidateconstructors,beanDefinition的构造方法)

  org.springframework.beans.factory.support.abstartowirecapanfactonfactonfactonfacton

  11.注入属性值

  

  12.初始化bean调用的动态代理AWEA调用@PostConstrut AOP也由初始完成生成

  13.最终添加到一个案例池中

  BeanFactory是工厂,即IOC容器或对象工厂。在春季,所有bean由BeanFactory(即IOC容器)管理,该容器提供了实例化对象和对象的函数。

  要使用的场景:

  从IOC容器中获取bean(byname或bytype)

  搜索IOC容器是否包含指定的Bean

  确定bean是否是一个示例

  FactoryBean是豆子。该豆不是一个简单的豆子,而是生产或修改对象生成的工厂豆。它的实现类似于在设计模式下的工厂模型和修饰符模式。

  在SBRing上方加载时,未创建FacotryBean。在GetBean创建GetBean时创建的使用方案。

  proxyfactorybean

  BeanFactory:用于生产Bean的弹簧顶 - 级别的核心界面。

  相同的:

  Spring提供两个不同的IOC容器,一个是BeanFactory,另一个是ApplicationContext。它们都是Java界面。

  它们都可以用来配置XML属性,并支持自动注入属性。

  BeanFactory和ApplicationContext都提供了一种使用getBean(“ bean name”)获取bean的方法。

  不同的:

  BeanFactory不支持国际化,即I18N,但是ApplicationContext为其提供了支持。

  BeanFactory和ApplicationContext之间的另一个区别是,该事件可以发布给注册为侦听器的BEAN。

  BeanFactory的核心实现之一是XMLBEANFACTORY,ApplicationContext的核心实现是ClassPathxmlapplicontext。我们使用WebApplicationContext获取GetServletContext方法。

  如果使用自动注入和豆类效果,则需要使用API注册AutowiredBeanPostProcessor。如果使用ApplicationContext,则可以使用XML进行配置。

  简而言之,BeanFactory提供了基本的IOC和DI功能,并且ApplicationContext提供了高级功能。BeanFactory可用于测试和非生产,但是ApplicationContext是一个更丰富的容器实施。它应该比BeanFactory更好。

  总结:

  (1)可观的豆:

  对于BeanFactory容器,当客户请求尚未初始化的容器或初始化的BEAN时,您需要注入其他尚未初始化的依赖项时,容器caster createBean以实例为例。对于ApplicationContext容器,该容器为开始,获得了BeanDefinition对象中的信息,并实例化了所有豆类。

  (2)设置对象属性(依赖注射):

  实例化对象被封装在BeanWrapper对象中,然后,Spring根据BeanDefinition中的信息和BeanWrapper提供的设置属性的接口完成依赖项注入。

  (3)处理意识接口:

  然后,Spring将检测该对象是否实现XXXAWARE接口,并将相关的XXXAWARE实例注入BEAN:

  ①如果此BEAN已实现BeanNameaware接口,则将调用SetBeanName(string BeanID)方法。这是弹簧配置文件中BEAN的ID值;

  ②如果此Bean已实现BeanFactoryAware接口,它将调用SetBeanFactory()方法实现它,该方法传达了Spring Factory本身。

  ③如果此BEAN已实现了ApplicationContextaware接口,它将调用SetApplicationContext(ApplicationContext)方法传递给Spring;

  (4)BeanPostProcessor:

  如果您想在BEAN上进行一些自定义的处理,则可以将BeanPostProcessor接口实现,然后将调用后处理后beforinitialization(Object obj,string s)方法。(5)initializeBean and Initmethod:

  如果Bean在Spring配置文件中配置了Initmarthod属性,则将自动调用其配置的初始化方法。

  (6)如果此BEAN实现BeanPostProcessor接口,则将调用后处理(Object obj,string s)方法;因为在BEAN的末尾调用此方法,因此可以应用于内存或缓存技术。上述步骤可以完成完成,bean已正确创建,然后您可以使用此bean。

  (7)可支配面:

  当不再需要豆时,它将通过清洁阶段。如果Bean实现了可支配BEAN接口,则将其称为Destrol()方法以实现其实现;

  (8)Destroamthod:

  最后,如果在此BEAN的弹簧配置中配置了Destroamthod属性,则将自动调用其配置的破坏方法。

  Spring AOP使用的动态代理,SO称为的动态代理意味着AOP框架不会修改字节代码,而是在内存中暂时生成AOP对象。切割点是由增强的处理和调用方法的方法原始对象。

  在弹簧AOP中,有两种主要的动态代理方式,JDK Dynamic代理和CGLIB动态代理。JDK Dynamic代理通过反射接收代理类,并要求代理类实现接口。JDK的核心动态代理是InvocationHandler接口和代理类。

  如果目标类未实现接口,则Spring AOP将选择使用CGLIB来动态代表目标类。CGLIB(代码生成库)是由代码生成的类别库。它可以在运行时动态生成类的子类。请注意,CGLIB是通过继承制造的动态代理,因此,如果某个类别标记为类别为类别为类别,则标记为ITFINAL,则不能将CGLIB用作动态代理。

  优点:无需在业务逻辑代码中编写与交易相关的代码。您只需要配置文件配置即可或使用注释(@transaction)。此方法不是侵入性的。

  缺点:陈述宣言的最佳粒度在于该方法。如果存在像代码块这样的交易要求,则只能更改代码并将代码块变成方法。

  代理模式 - 在AOP中使用。

  单模式 - 弹簧配置文件中定义的bean定义为单打模式。

  模板方法 - 用于解决代码重复的问题。例如。RESTTEMPLATE,JMSTEMPLATE,JPATEMPLATE。

  工厂模式 - 使用BeanFactory来创建示例。

  适配器弹簧AOP

  春季数据哈希录

  观察者春季事件驱动器模型

  返回春季意识返回界面

  https://juejin.cn/post/7085607089044717599

  (1)Singleton:默认情况下,每个容器中只有每个bean的实例。单个示例模式由beanfactory本身维护。

  (2)原型:为每个BEAN请求提供一个实例。

  (3)请求:为每个网络请求创建一个实例。请求完成后,Bean将失败并被垃圾回收器回收。

  (4)会话:类似于请求范围,以确保每个会话中有一个bean的实例。会议到期后,BEAN将跟随。

  (1)contextrefreshdevent:在configurableApplicationContext接口中调用RefResh()方法时。

  (2)ContextStartEvent:当容器调用configurableApplicationContext的start()方法时,当容器启动/重新启动容器时,将触发事件。

  (3)ContextStoppedEvent:当容器调用ConfigurableApplicationContext的stop()方法时,停止了事件的容器。

  (4)ContextClosedEvent:当应用程序关闭时,将触发事件时。关闭容器时,所有由容器管理的单个case bean被破坏了。

  (5)requestHandLeDevent:在Web应用程序中,当HTTP请求结束以触发事件时。

  (1)在建议之前:在连接点之前执行的通知,但是该通知不能阻止连接点之前执行(除非抛出异常)。

  (2)返回后,通知(返回建议后):联接点正常完成后执行的通知:例如,没有异常抛弃和正常返回。

  (3)抛出异常通知(在提出建议后):当该方法从异常出口中丢弃时执行的通知。

  (4)通知后(之后)建议:连接点退出时执行的通知(无论是正常返回还是异常退出)。(5)围绕建议:连接点的通知,如果该方法被称为。最强大的通知类型。包围通知可以完成方法调用之前和之后的自定义行为。它还选择是否继续连接点还是直接返回其自己的返回值或抛出异常以结束执行。最常用的通知类型。

  在春季,对象无需查找或创建与之关联的其他对象。该容器负责引用需要与每个对象合作并使用Autowire配置自动加载模式的对象。

  弹簧框架XML配置中有5个自动组件:

  (1)否:未自动组装默认方法,并且REF属性是通过手动组装Bean设置的。

  (2)Byname:通过BEAN的名称自动组装。如果一个豆的属性与另一个豆的名称相同,则执行自动组件。

  (3)Bytype:通过参数的数据类型自动组装。

  (4)构造函数:使用构造函数组装,构造函数的参数由Bytype组装。

  (5)自动检测:自动检测,如果有一个构造函数,可以自动通过构造组装,否则它将由Bytype自动组装。

  基于注释:

  使用Motion Assembly指定的BEAN的@Autowired注释。在使用@Autowired注释之前,您需要在弹簧中配置配置文件。 当开始春季IOC时,容器会自动加载自动鸟类PONPOSPOSTPOSTSOR后处理器。当容器被扫描到 @autowied时, @resource或@inject时,将在IOC容器中自动找到所需的bean并将其组装到对象的属性中。当使用@Autowired时,首先检查容器中的bean的相应类型:

  如果查询结果仅为一个,则将BEAN组装到@Autowired指定的数据;如果查询的结果不止一个结果,则@Autowired将根据名称找到它;

  如果上述搜索的结果为空,则将抛出异常。解决方案解决后,使用“必需” = false。

  @Autowired可以用于:构造功能,成员变量,setter方法

  注意:@Autowired和@Resource之间的区别

  如果文章有问题,您仍然必须正确。如果您需要文章中显示的信息,则可以在“喜欢收藏和关注”之后获得私人消息的编辑。

  原始:https://juejin.cn/post/7095261899146657805

最新推荐
猜你喜欢