你经常使用的Spring有哪些特点,你都知道么

Spring一共有四大特点,我们一起来看一看。

一 特点

  1. 容器

  2. 控制反转(IOC)

  3. 面向切面(AOP)

  4. 轻量级框架(防侵入,集成各种框架)


二 特点解释

1、容器

spring包含并管理应用对象的配置和生命周期,能够管理项目中的所有对象。,且本身就是一个容器。


2、控制反转

促进了低耦合(对象与对象之间松散耦合,也利于功能的复用)。一个对象依赖其他对象会通过被动的方式传递进来,而不是对象自己创建或者查找依赖对象。将创建对象的控制权的转移Spring容器中。此时 容器根据配置文件去创建实例和管理各个实例之间的依赖关系。应用到了java的反射机制。

(1)Spring的IOC有三种注入方式 :构造器注入、setter方法注入、根据注解注入


3、面向切面(AOP)

(1)含义:将纵向重复的代码(公共行为和逻辑)横向抽取出来并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect)。Spring框架应用了面向切面的思想,主要体现在为容器中管理的对象生成动态代理对象。


拓展:

OOP面向对象导致了大量代码的重复,而不利于各个模块的重用(允许开发者定义纵向的关系,并适用于定义横向的关系)。

(3)作用:

减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理。


4 AOP的代理:

  AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ;动态代理则以Spring AOP为代表。

(4.1)AspectJ:是静态代理的增强,就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强,他会在编译阶段将AspectJ(切面)织入到Java字节码中,运行的时候就是增强之后的AOP对象。


(4.2)动态代理:AOP框架不会去修改字节码,而是每次运行时在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理:

(4.2.1)JDK动态代理

只提供接口的代理,不支持类的代理。核心InvocationHandler接口和Proxy类,InvocationHandler 通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起;接着,Proxy利用 InvocationHandler动态创建一个符合某一接口的的实例,  生成目标类的代理对象。

(4.2.2)CGLIB动态代理

如果代理类没有实现 InvocationHandler 接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成指定类的一个子类对象,并覆盖其中特定方法并添加增强代码,从而实现AOP。CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。

JDK动态代理和CGLIB动态代理区别

(1)静态代理与动态代理区别在于生成AOP代理对象的时机不同,相对来说AspectJ的静态代理方式具有更好的性能,但是AspectJ需要特定的编译器进行处理,而Spring AOP则无需特定的编译器处理,所以spring的AOP使用动态代理。

(2)jdk代理提供接口的代理(通过实现接口的方式),CGLIB提供类的且不是被final修饰的类(通过继承类的方式)。

(3)jdk代理实现了InvocationHandler接口,CGLIB没有实现

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/242930.html

联系我们
联系我们
分享本页
返回顶部