SpringBoot基于注解的面向切面编程

本文介绍了SpringBoot中的面向切面编程(AOP),强调了AOP在解耦和提高模块化方面的作用。详细解释了通知(advice)的五种类型:前置、后置、返回、异常和环绕通知,并探讨了切点(pointcut)、连接点(join point)和切面的概念。文章特别提到了Spring对@AspectJ注解的支持,如何定义和使用切面以及拦截规则。

AOP 中,模块化单位是方面,可以将一个方面想像为在独立实体中实现了软件系统中(横切)部分的常见功能,其主要目的是通过分离这些横切关注点而增加模块化 ,同时也符合DRY (不要重复你自己)原则,以避免代码重复
spring aop 是为了解耦 ,让一组类共享相同的行为,使用 切面来满足跨应用程序的横切关注点,从而提高应用程序的模块化
定义AOP 的术语:

  1. 通知:(advice)
    切面的目标 – 必须完成的工作 ,切面的工作称为通知 通知定义了切面是什么以及何时使用, 除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题

spring 切面有五种类型的通知
前置通知(before)在目标方法被调用前调用通知功能

后置通知(after) 在目标方法完成后调用通知 ,不管接合点是否执行,都会执行通知,接合点的执行可能正常放回或者抛出异常,但不管发现,通知代码都会被执行

返回通知(after-returning) 在目标方法成功执行之后调用通知 ,如果从一个通知方法中抛出一个异常,则不会执行该通知

异常通知 (after-throwing )在目标方法抛出异常后被调用

环绕通知(around)在被通知的方法调用之前和调用之后执行自定义的行为 实际上通过围绕结合点而在其周围 当调用之前执行完成,并没有错误,可以使用point.proceed(); 进入调用之后
2. 切点(pointcut)
切点的定义会匹配通知所需要织入一个或多个连接点,一般使用明确的类和方法名称,或者利用正则表达式定义所匹配的可和方法的名称来指定这些切点 。可以将切点看作是用来缩小切面所通知的连接点的范围

  1. 连接点(join point)
    连接点是在应用执行过程中能够插入切面的一个点,这个点可以是调用方法时,抛出异常时,切面代码可以利用这些点插入到应用的正常流程之中,并且添加新的行为
  2. 切面
    切面是通知和切点的结合,通知和切点共同定义了切面的全部内容 ----是什么,在何时和何处完成其功能

spring 支持as

Spring Boot实现AOP面向切面编程的具体方法如下: 1. 首先,你需要在项目的pom.xml文件中添加spring-boot-starter-aop依赖。可以参考以下代码: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> ``` 2. 然后,你需要编写一个用于拦截的bean。这个bean将包含你想要在目标方法执行前后执行的逻辑。你可以使用注解或者编程方式来定义切面。例如,你可以使用@Aspect注解来定义一个切面,然后在切面的方法上使用@Before、@After等注解来定义具体的拦截行为。 3. 接下来,你需要将切面应用到目标对象上,创建代理对象。这个过程称为织入(Weaving)。在Spring Boot中,你可以使用@EnableAspectJAutoProxy注解来启用自动代理,它会根据切面定义自动创建代理对象。 总而言之,Spring Boot实现AOP面向切面编程的具体方法包括:添加依赖、编写用于拦截的bean,以及启用自动代理。这样就能实现在目标方法执行前后执行特定逻辑的效果了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot整合aop面向切面编程过程解析](https://download.youkuaiyun.com/download/weixin_38689551/12743012)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SpringBoot实现AOP面向切面编程](https://blog.youkuaiyun.com/weixin_52536274/article/details/130375560)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值