当前位置:   article > 正文

Spring框架的优点,和IoC、AOP_spring 的 ioc 和 aop 是什么,有哪些优点?

spring 的 ioc 和 aop 是什么,有哪些优点?

1、什么是 Spring 框架,它的优点是什么?它的主要功能是什么?

Spring 框架是一个开源的 Java 框架,主要用于开发企业级 Java 应用程序。它提供了一组强大的功能和工具,使得开发者能够更加容易地构建高效、可维护和可扩展的 Java 应用程序。

Spring 框架的主要优点包括:

1、轻量级:Spring 框架非常轻量级,它的核心容器只包含少量的类和接口,它不需要太多的配置和依赖。因此它的速度非常快。

2、依赖注入:Spring 框架通过依赖注入(DI)来管理组件之间的关系,使得组件之间的耦合度降低。

3、面向切面编程(AOP):Spring 框架提供了面向切面编程的支持,可以将横切关注点(比如安全、日志、事务等)与业务逻辑代码分离。

4、容器:Spring 框架提供了一个容器,用于管理应用程序的对象和依赖关系,并提供了一些可重用的核心组件,如 BeanFactory、ApplicationContext 等,这些对象可以是 Spring Bean、JDBC 连接、JMS 连接、Servlet 等。

5、事务管理:Spring 框架提供了声明式事务管理的支持,使得开发者可以很容易地进行事务管理。

6、集成:Spring 框架提供了与其他框架的集成支持,比如与 Hibernate、MyBatis、Struts 等框架的集成。

Spring 框架的主要功能包括:

1、提供了一个容器用于管理应用程序的对象和依赖关系。

2、提供了依赖注入(DI)的支持,用于管理应用程序的组件和对象之间的依赖关系。

3、提供了 AOP 的支持,用于解决应用程序中的横切关注点。

4、提供了声明式事务管理机制,使得开发者可以更容易地管理事务。

5、提供了 MVC 框架,用于构建 Web 应用程序。

6、提供了数据访问框架,使得开发者可以更容易地访问和操作数据库。

7、提供了缓存框架(redis)和安全框架(Security),用于提高应用程序的性能和安全性。

2、IOC 和 AOP 是什么,它们的作用是什么?

IOC(Inversion of Control)控制反转,也称为DI(Dependency Injection)依赖注入,是一种设计模式。所谓IOC ,就是把原先代码里需要开发者实现的对象创建和关系依赖,反转交给SpringIOC容器管理对象的生命周期和对象之间的依赖关系。

IOC底层原理

用图例说明一下,传统程序设计如图2-1,都是主动去创建相关对象然后再组合起来:

img

图2-1 传统应用程序示意图

当有了IoC/DI的容器后,在客户端类中不再主动去创建这些对象了,如图2-2所示:

img

图2-2有IoC/DI容器后程序结构示意图

IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找

Spring通过配置文件描述Bean及Bean之间的依赖关系(或者是注解@annotation),利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系。

Spring启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配Bean之间的依赖关系,最后将Bean保存到Spring容器中的Bean缓存池中,其中Bean缓存池是由ConcurrentHashMap实现。

img

控制反转是依赖倒置原则的一种代码设计的思路,具体采用的方法是依赖注入(Dependency Injection)。所谓依赖注入,上层控制底层,底层类作为参数传入上层类

img

AOP底层原理

AOP(Aspect Oriented Programming,面向切面编程)是 Spring 框架提供的一种重要机制,它可以将应用程序中的横切关注点(如日志、事务、安全等)从业务逻辑中分离出来,并集中管理。

(1)AnnotationAwareAspectJAutoProxyCreator(AspectJ自动代理创建器)类是一个子类,实现AOP功能的注释驱动的AspectJ自动代理创建器。

主要作用是将切面(Aspect)逻辑应用于目标对象。它会扫描 Spring容器中的所有 Bean 定义,检测并匹配合适的切面,并通过代理对象将切面逻辑织入到目标对象中。这样,在调用目标对象方法时,切面逻辑会按照设定的切点和通知顺序得到执行。

  1. 通过扫描Bean定义和注解,自动识别潜在的Aspect类(包含切面逻辑的类)。

  2. 使用AspectJAdvisorFactory工厂创建AspectJAdvisor,它是Advisor接口的实现,包含切面逻辑的细节信息。

  3. 通过构建Advisor列表,筛选出候选的切面(包含切面通知的对象)。

  4. 创建代理对象,将切面逻辑织入到目标对象中。

  5. 控制代理对象的创建过程,包括初始化Bean工厂、检查条件是否符合成为Aspect的要求等。

(2)AspectJAwareAdvisorAutoProxyCreator是一个用于自动创建代理对象的类,它是 Spring 框架中的一个关键组件。主要作用是将切面(Aspect)逻辑应用于目标对象。它会扫描 Spring 容器中的所有 Bean 定义,检测并匹配合适的切面,并通过代理对象将切面逻辑织入到目标对象中。这样,在调用目标对象方法时,切面逻辑会按照设定的切点和通知顺序得到执行。

该类主要涉及以下几个关键概念和功能:

  1. 切面匹配:使用 AspectJ 表达式或其他方式定义切面,并根据切点表达式寻找匹配的方法或连接点。

  2. 通知应用:根据切面定义的通知类型(如前置通知、后置通知、环绕通知等),在目标方法执行前、后或异常抛出时执行相应的逻辑。

  3. Advisor 创建:通过解析切面定义和切点表达式,创建对应的 Advisor 对象。Advisor 是 Spring AOP 中的通知和切点的组合。

  4. 代理对象创建:根据切面和目标对象,使用动态代理技术(如 JDK 动态代理或 CGLIB 代理)创建代理对象,并将切面逻辑织入到代理对象中。

  5. Bean 初始化:在 Bean 初始化过程中,通过回调方法提供必要的初始化支持。

(3)AbstractAdvisorAutoProxyCreator 是 Spring 框架中的一个抽象类,它是 AOP(面向切面编程)功能的关键组件之一。

作用是为目标对象自动创建代理,并将匹配的切面逻辑织入到代理对象中。它可以通过配置或编程方式来指定需要切面处理的目标对象,以及切面的定义和顺序。该抽象类主要涉及的概念和功能(切面定义、Advisor创建代理对象创建、Bean后置处理)

该类主要涉及以下几个关键概念和功能:

  1. 切面定义:通过配置或编程方式定义切面(Aspect),包括切点(Pointcut)、通知(Advice)等。

  2. Advisor 创建:根据切面定义,创建对应的 Advisor 对象。Advisor 是 Spring AOP 中的通知和切点的组合,用于定义切面逻辑以及在何时、何地应用该逻辑。

  3. 代理对象创建:使用动态代理技术(如 JDK 动态代理或 CGLIB 代理)创建代理对象。该代理对象会包含切面的逻辑,并在调用目标方法时按照设定的通知顺序执行相应的切面逻辑。

  4. Bean 后置处理:通过 BeanPostProcessor 接口,在目标对象实例化后的初始化阶段,在目标对象中应用切面逻辑。

(4)AbstractAutoProxyCreator 是 Spring 框架中的一个抽象类,它用于自动创建代理对象并应用切面逻辑。具体来说,AbstractAutoProxyCreator 是 Spring AOP 框架的关键组件之一,用于实现面向切面编程(AOP)的功能。它实现了代理对象的创建、切面逻辑的织入以及 bean 后置处理器等功能,为实现面向切面编程提供了基础设施。

AbstractAutoProxyCreator 类的主要作用如下:

  1. 代理对象的创建:AbstractAutoProxyCreator 负责根据配置信息或编程方式创建代理对象。它会检查目标对象是否符合代理条件,并决定是否需要对目标对象进行代理。

  2. 切面逻辑的织入:AbstractAutoProxyCreator 在代理对象创建后,将切面逻辑织入到代理对象中。切面逻辑包括切点、通知等,可以在方法调用前、后或异常抛出时执行相应的切面逻辑。

  3. Bean 后置处理器:作为 Spring 的 BeanPostProcessor 的子类,AbstractAutoProxyCreator 支持在目标对象实例化后的初始化阶段对目标对象进行处理。它可以在代理对象创建后,对其进行额外的配置或增强操作。

(5)ProxyProcessorSupport 是 Spring 框架中的一个抽象类,是 Spring AOP 框架中代理对象创建和配置的核心组件之一。它提供了基本的代理处理器的支持功能。具体来说,ProxyProcessorSupport 主要用于管理和协调代理相关的处理器,以便在创建和配置代理对象时提供一致性的行为。它通过管理代理处理器的执行顺序,提供了一种可扩展的方式来自定义和控制代理对象的创建和配置过程。

ProxyProcessorSupport 类的主要作用可以总结如下:

  1. 代理处理器管理:ProxyProcessorSupport 维护了一个代理处理器列表(proxyProcessors),用于管理和调度各个代理处理器的执行顺序。代理处理器是对代理对象进行处理的组件,它们可以在代理对象的创建和配置过程中进行干预和修改。

  2. 前置处理器:ProxyProcessorSupport 提供了前置处理器(beforeProxyCreation)的功能,允许用户可以在代理对象创建之前进行自定义的处理操作。这些处理器可以用于修改或验证目标对象的一些属性、执行其他预处理逻辑等。

  3. 后置处理器:ProxyProcessorSupport 同样提供了后置处理器(afterProxyCreation)的功能,允许用户可以在代理对象创建之后进行自定义的处理操作。这些处理器可以用于对代理对象进行一些额外的配置、添加其他的切面或增强等。

  4. 协调处理器执行顺序:ProxyProcessorSupport 确保了代理处理器的执行顺序,它会按照预定的顺序依次调用前置处理器和后置处理器,以确保处理器之间的协调和一致性。

(5)在 Spring 框架中,ProxyConfig 类用于配置代理对象的相关属性和行为。它提供了一组方法,允许用户定义代理对象的创建、使用的代理类型、目标对象的引用以及其他与代理相关的设置。

具体来说,ProxyConfig 类的作用包括:

  1. 代理类型的设置:通过 setProxyTargetClass(boolean proxyTargetClass) 方法,可以设置代理对象是基于接口(默认)还是基于类的代理。如果选择基于类的代理,则代理对象会继承目标对象的类。

  2. 目标对象的设置:通过 setTarget(Object target) 方法,可以指定目标对象的引用。代理对象将会对该目标对象进行代理,并将相应的切面逻辑织入到目标对象方法的调用中。

  3. 代理创建方式的设置:通过 setProxyTargetSource(ProxyTargetSource proxyTargetSource) 方法,可以设置代理对象创建的方式。ProxyTargetSource 是一个接口,定义了不同的代理对象创建策略,如基于目标对象的单例或原型创建代理对象。

  4. AOP 配置的设置:通过 addAdvisor(Advisor advisor) 方法,可以添加切面(Advisor)到代理配置中。切面定义了切点(要拦截的目标对象方法)和通知(在切点执行前、后、异常抛出时执行的逻辑)。

  5. 其他代理相关设置:ProxyConfig 还提供了其他一些方法,如设置是否优化代理对象,默认是否暴露代理对象(返回 true),以及对序列化进行支持等。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/384703
推荐阅读
相关标签
  

闽ICP备14008679号