什么是AOP?AOP配置需要哪些依赖?

这篇具有很好参考价值的文章主要介绍了什么是AOP?AOP配置需要哪些依赖?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. **什么是AOP?**

   AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它与传统的面向对象编程(OOP)相辅相成。AOP的核心思想是将程序的功能划分为不同的关注点(concerns),然后通过横切关注点的方式将这些关注点模块化,以便于在不同的地方重用和管理。AOP引入了概念如下:

   - **切面Aspect,切面类、拦截处理类、增强处理类):** 切面是关注点的模块化单元。它定义了一系列的通知(Advice),以及切点(Pointcut),指定在何处应用这些通知。

   - **通知Advice 增强处理 前置,后置,异常,最终):** 在不同场景下拦截的功能 ,通知是切面中具体的操作或行为,它定义了在切点上执行的代码。通知可以在切点之前、之后或周围执行。

   - **切点Pointcut,拦截规则,拦截什么拦截谁):** 切点是一个表达式,它定义了在程序中哪些地方应用通知。通常,切点用于匹配方法调用、特定的类、特定的包等。

如:

expression属性定义需要增强的方法的规则

execution值定义具体拦截谁切入哪一个方法或哪一个类或哪一个包,或所有

execution(访问修饰符 返回值类型 包名(两个点是包括子包).类名.方法名(参数列表)))

execution(* *..*.*(..)) 所有返回值类型 所有包下的所有类的所有方法 不论有没有参数

   - **连接点Join Point具体被拦截到的方法):** 连接点是程序执行过程中的一个特定点,如方法调用异常抛出等。通知可以与连接点关联。

   - **织入Weaving由spring完成切面类包裹住对象,创建出代理对象):** 织入是将切面的通知插入到程序的执行流程中的过程。它可以在编译时、加载时或运行时进行。

   - **代理对象  中间人,可以拦截对原始对象方法的调用,并在调用前后执行额外增强处理的操作

它不需要修改原始类的代码,它用于在调用方法时执行额外的逻辑。这些代理对象通常用于实现不同种类的横切关注点,比如日志记录、事务管理、安全性

spring实现代理的方式:

Spring框架主要使用两种类型的代理对象:JDK动态代理和CGLIB代理。

  1. JDK动态代理:如果目标类实现了至少一个接口,Spring将使用JDK动态代理。它基于Java的反射机制,创建一个实现了目标接口的代理类。这个代理类中的方法调用会被重定向到实际的目标对象,同时可以在方法调用前后插入额外的逻辑。

  2. CGLIB代理:如果目标类没有实现任何接口,Spring将使用CGLIB代理。CGLIB是一个强大的第三方库,它通过创建目标类的子类来实现代理。代理类继承自目标类,因此可以覆盖目标类的方法,并在其中添加拦截逻辑。

举个例子,假设你有一个Service类,你想要在调用其方法时记录日志。使用Spring的代理功能,你可以创建一个日志记录的代理对象,这个代理对象会包装原始的Service对象。当你调用代理对象的方法时,它会先记录日志,然后再将调用传递给实际的Service对象。

在拿JDK动态代理举例来说,假设你有一个名为 UserService 的目标类,它提供了一些用户相关的方法,比如 getUserById(int id)createUser(User user)。如果你想在调用这些方法前后添加日志记录,你可以创建一个代理对象来实现这个功能。首先,你需要定义一个代理接口,如 UserServiceProxy,其中包含与 UserService 相同的方法签名。然后,使用 JDK 动态代理创建一个实现了 UserServiceProxy 接口的代理类,这个代理类会包装实际的 UserService 对象,并在方法调用前后插入日志记录逻辑。

总之,代理接口是目标类的方法签名定义,它是为了在动态代理中创建代理对象时使用的。被代理的目标类需要实现这个接口,以便代理对象可以重定向方法调用到实际的目标对象,并实现相同的方法签名。

总之,Spring的代理对象允许你在不修改原始类代码的情况下,对方法调用进行拦截和增强,从而实现各种横切关注点的功能(日志记录、事务管理、安全性、性能监控)。

   AOP的主要目标是解耦关注点,使得代码更易维护、扩展和理解。典型的应用包括日志记录性能监控事务管理等。

aop的简单配置aop.xml:

'''xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
>
    <context:annotation-config></context:annotation-config>
    <context:component-scan base-package="org.example.service"></context:component-scan>

    <aop:config>
        <aop:aspect ref="userService">
            <aop:pointcut id="pt" expression="execution(public void org.example.service.impl.UserServiceimpl.insertUser())"/>
            <aop:before method="begin" pointcut-ref="pt"/>
            <aop:after-returning method="commit" pointcut-ref="pt"/>
            <aop:after-throwing method="rollback" pointcut-ref="pt" throwing="e"/>
            <aop:after method="close" pointcut-ref="pt"/>
        </aop:aspect>
    </aop:config>
<!--
    1.切面 拦截处理类
    2.切入点 拦截规则 前置,后置,异常,最终
    3.连接点 具体被拦截到的方法
    4.通知 在不同场景下拦截的功能
    5.织入 由spring完成切面类包裹住对象,创建出代理对象
-->
</beans>

'''

2. **AOP配置需要哪些依赖?**

   在Java中,AOP的实现通常依赖于特定的AOP框架。两个主要的AOP框架是Spring AOP和AspectJ。每个框架都需要一组依赖库来支持AOP功能。

   **Spring AOP:**

   如果你使用Spring框架,Spring AOP通常是默认选择。配置Spring AOP需要以下依赖:

   - **spring-core.jar:** Spring核心库,包括IoC容器的实现。
   - **spring-aop.jar:** Spring AOP模块,提供AOP功能。
   - **spring-aspects.jar(可选):** 包含一些常用的AspectJ切面,如果需要使用这些切面,则需要包含这个库。
   - **aspectjweaver.jar(可选):** 如果你希望使用基于注解的AspectJ风格的AOP,需要包含AspectJ的weaver库。

   **AspectJ:**

   如果你希望使用更强大的、纯粹的AOP功能,可以选择AspectJ。配置AspectJ需要以下依赖:

   - **aspectjrt.jar:** AspectJ运行时库,用于支持AspectJ切面的运行。
   - **aspectjweaver.jar:** AspectJ编织器,用于将切面织入到目标程序中。
   - **aspectjtools.jar(可选):** AspectJ工具,用于编译AspectJ切面。

   注意:具体的依赖库版本可能会根据你的项目和框架的版本而有所不同。因此,建议查看官方文档或使用构建工具(如Maven或Gradle)来管理依赖。文章来源地址https://www.toymoban.com/news/detail-670679.html

到了这里,关于什么是AOP?AOP配置需要哪些依赖?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • SpringBoot支持bootstrap.yml/bootstrap.properties配置文件,需要导入spring-cloud-starter-bootstrap依赖

    说明: 在SpringBoot 2.4.x版本之后,对于bootstrap.properties/bootstrap.yaml配置文件的支持,需要导入如下依赖: 注意: 1、导入依赖后,还需要开启 spring.cloud.bootstrap.enabled=true 2、spring cloud starter alibaba nacos config,引用这个配置中心的依赖后,需要使用bootstrap.yml或bootstrap.properties 作

    2024年02月13日
    浏览(9)
  • 买电脑主要看哪些配置?有什么需要注意的?给大家推荐几款性价比高的电脑

    电脑是我们日常生活和工作中不可缺少的工具,但是面对市场上琳琅满目的电脑品牌和型号,我们该如何选择一台适合自己需求的电脑呢?本文将从以下几个方面介绍买电脑主要看哪些配置,有什么要注意的,以及推荐几个性价比高的电脑。 一般来说,买电脑主要看以下四个

    2024年02月12日
    浏览(15)
  • 【2】Spring手写模拟-依赖注入、初始化、AOP

    【2】Spring手写模拟-依赖注入、初始化、AOP

    首先回顾一下我们之前的流程 ApplicationContext 构造方法 获取Spring配置类 @ComponetScan 注解,扫描包,获取其路径及其对应的字节码文件 逐个扫描字节码文件 利用字节码文件获取类,查看是否包含 @Componet 注解,并获取或者生成 BeanName 获取 BeanDefinition ,包含其类和类型(单例,多

    2024年02月16日
    浏览(24)
  • 【Spring】javaBean、依赖注入、面向切面AOP、使用注解开发

    【Spring】javaBean、依赖注入、面向切面AOP、使用注解开发

    有一定规范的Java实体类,类内提供了一些公共方法以便外界对该对象的内部属性进行操作 所有属性都是private,所有的属性都可以通过get/set方法进行访问,同时还需要有一个无参构造(默认就有) 高内聚,低耦合是现代软件的开发的设计模式 之前编写的图书管理系统具有高

    2024年02月08日
    浏览(28)
  • B057-spring增强 依赖注入 AOP 代理模式 创建Bean

    B057-spring增强 依赖注入 AOP 代理模式 创建Bean

    DI:依赖注入 环境准备,即写一个spring测试,见工程 构造器注入 即使用构造器来给Bean的对象的属性赋值 MyBean OtherBean SpringTest-Context.xml SpringTest setter方法注入 即用setter方法给bean对象的属性赋值 MyBean OtherBean SpringTest-Context.xml SpringTest AOP 概念 事务管理:比如可以抽取try catch的

    2024年02月12日
    浏览(8)
  • OpenAi最简洁的Java流式返回接入方式,没有第三方依赖,只需要使用Spring Boot即可!轻松构建你的带有聊天记忆、画图功能的chatgpt!

    OpenAi最简洁的Java流式返回接入方式,没有第三方依赖,只需要使用Spring Boot即可!轻松构建你的带有聊天记忆、画图功能的chatgpt!

    OpenAi最简洁的Java流式返回接入方式,没有第三方依赖,只需要使用Spring Boot即可!轻松构建你的带有聊天记忆、画图功能的chatgpt! GitHub - NiuXiangQian/chatgpt-stream: OpenAi最简洁的Java流式返回接入方式,没有第三方依赖,只需要使用Spring Boot即可!轻松构建你的带有聊天记忆、画图

    2024年02月12日
    浏览(36)
  • 什么是 AOP?对于 Spring IoC 和 AOP 的理解?

    什么是 AOP?对于 Spring IoC 和 AOP 的理解?

    AOP(Aspect-Oriented Programming) ,即 面向切面编程, 它与 OOP( ObjectOriented Programming, 面向对象编程) 相辅相成,提供了与OOP 不同的抽象软件结构的视角 在 OOP 中, 我们以 类(class) 作为我们的基本单元 而 AOP 中的基本单元是 Aspect(切面) IOC(Inverse of Control:控制反转) 是一种设计思想,

    2024年02月12日
    浏览(17)
  • 网络安全需要学什么?网络安全需要掌握哪些技能?

    目前网络安全是一个非常受欢迎的职业,其前景好、需求量大,无论大企业还是小企业,网络安全都是一个双高职位,地位高、薪资高,而且入门门槛也比较低。那么网络安全难学吗?需要掌握哪些技能?接下来,为大家介绍一下。 网络安全难学吗? 学习网络安全需要循序渐进

    2024年02月13日
    浏览(14)
  • 大数据是什么?需要学习哪些内容

    现在大数据发展的如火如荼,也有不少小伙伴对于什么是大数据比较感兴趣,那么大数据在比较官方的定义是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率

    2024年02月09日
    浏览(8)
  • 【JavaEE】面向切面编程AOP是什么-Spring AOP框架的基本使用

    【JavaEE】面向切面编程AOP是什么-Spring AOP框架的基本使用

    【JavaEE】 AOP(1) 1.1 AOP 与 Spring AOP AOP ( A spect O riented P rogramming),是一种思想,即 面向切面编程 Spring AOP 则是一个框架,Spring项目中需要引入依赖而使用 AOP和Spring AOP的关系就相当于IoC和DI Spring AOP让开发者能够半自动的开发AOP思想下实现的功能 1.2 没有AOP的世界是怎样的

    2024年02月11日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包