Spring02之面向切面【AOP】

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Spring02之面向切面【AOP】

AOP中关键性概念🎇🎇🎇🎇


连接点(Joinpoint):程序执行过程中明确的点,如方法的调用,或者异常的抛出.


目标(Target):被通知(被代理)的对象

注1:完成具体的业务逻辑


通知(Advice):在某个特定的连接点上执行的动作,同时Advice也是程序代码的具体实现,例如一个实现日志记录的代码(通知有些书上也称为处理)

注2:完成切面编程


代理(Proxy):将通知(公共部分的代码,日志记录)应用到目标(具体的业务逻辑方法)对象后创建的对象(代理=目标+通知),

例子:外科医生+护士

注3:只有代理对象才有AOP功能,而AOP的代码是写在通知的方法里面的


适配器(Advisor):适配器=通知(Advice)+切入点(Pointcut)


如何实现AOP

目标对象只负责业务逻辑代码

通知对象负责AOP代码,这二个对象都没有AOP的功能,只有代理对象才有


1.什么是 AOP:


即向切面编程


2. AOP带来的好处:让我们可以 “专心做事”


连接点、目标、通知、代理

当方法被调用时,AOP将通知应用到目标上所创建的对象叫代理

代理=目标+通知,只有完整的代理对象才具备AOP特性,而AOP代码是写在通知中的。


案例:
   public void doSameBusiness (long lParam,String sParam){
     <---------------------  AOP
     //日志记录
     // 输入合法性验证
     if (lParam<=0){
          throws new IllegalArgumentException("xx应该大于0");
     }
     if (sParam==null || sParam.trim().equals("")){
          throws new IllegalArgumentException("xx不能为空");
     }
     // 异常处理
     try{ 
      ...   //核心业务逻辑
     }catch(...){
     }catch(...){
     }
     // 事务控制
     tx.commit();
   }


例子:病人做手术


    外科医生+护士


   主刀医生:理解为AOP中的目标,专注具体的业务逻辑操作

   麻醉师和护士:理解为AOP中的通知,在某种特定的连接点上执行的动作

   上述结合:AOP 代理对象:将通知应用到具体目标对象后创建对象

   代理=目标+通知

   只有代理对象才有AOP功能。


3 工具类org.springframework.aop.framework.ProxyFactoryBean用来创建一个代理对象,在一般情况下它需要注入以下三个属性:


 proxyInterfaces:代理应该实现的接口列表(List)

 interceptorNames:需要应用到目标对象上的通知Bean的名字。(List)

 target:目标对象 (Object)


4. 前置通知(org.springframework.aop.MethodBeforeAdvice):


在连接点之前执行的通知()

案例:在购书系统当中使用AOP方式实现日志系统


5. 后置通知(org.springframework.aop.AfterReturningAdvice):


在连接点正常完成后执行的通知

案例:在线购书系统中,要求不修改BookBizImpl代码的情况下增加如下功能:对买书的用户进行返利:每买本书返利3元。(后置通知)

即:每调用一次buy方法打印:“[销售返利][时间]返利3元。”


6. 环绕通知(org.aopalliance.intercept.MethodInterceptor):


包围一个连接点的通知,最大特点是可以修改返回值,由于它在方法前后都加入了自己的逻辑代码,因此功能异常强大。它通过MethodInvocation.proceed()来调用目标方法(甚至可以不调用,这样目标方法就不会执行)

案例:修改日志系统不光要输出参数,还要输出返回值(环绕通知)

//这个接口里面没有定义方法,我们要求我们的类必须实现afterThrows这个方法
public void afterThrowing( [Method method,] [Object args,] [Object target,] Throwable throwable );
//前面三个参数都是可选的,只有第三个参数是必须的,同时我们还可以在同一个类中定义这个方法的多个版本,如:
public void afterThrowing( MyException1 ex ) {}
public void afterThrowing( MyException2 ex ) {}
//具体那个方法被调用则根据具体的Exception来判断,由AOP容器自动识别 执行


7. 异常通知(org.springframework.aop.ThrowsAdvice):


这个通知会在方法抛出异常退出时执行

案例: 书本价格为负数时抛出一个异常,通过异常通知取消此订单


8. 适配器


(org.springframework.aop.support.RegexpMethodPointcutAdvisor) 适配器=通知(Advice)+切入点(Pointcut)

案例:通过适配器解决发书评时也返利的问题

*buy


9. 请使用接口接收返回的代理对象


        A    


 B            C    里氏替换原则


A:IBookBiz
  B:BookBizImpl implements IBookBiz
  C:Proxy implements IBookBiz
  IBookBiz bookBiz=new BookBizImpl(); 
  IBookBiz bookBiz=new Proxy();
  BookBizImpl bookBiz=(BookBizImpl)proxy;
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
XML Java 数据安全/隐私保护
Spring Aop该如何使用
本文介绍了AOP(面向切面编程)的基本概念和术语,并通过具体业务场景演示了如何在Spring框架中使用Spring AOP。文章详细解释了切面、连接点、通知、切点等关键术语,并提供了完整的示例代码,帮助读者轻松理解和应用Spring AOP。
Spring Aop该如何使用
|
22天前
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
46 5
|
27天前
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
53 8
|
27天前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
|
27天前
|
XML 监控 安全
深入调查研究Spring AOP
【11月更文挑战第15天】
40 5
|
27天前
|
Java 开发者 Spring
Spring AOP深度解析:探秘动态代理与增强逻辑
Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
39 4
|
1月前
|
安全 Java 编译器
什么是AOP面向切面编程?怎么简单理解?
本文介绍了面向切面编程(AOP)的基本概念和原理,解释了如何通过分离横切关注点(如日志、事务管理等)来增强代码的模块化和可维护性。AOP的核心概念包括切面、连接点、切入点、通知和织入。文章还提供了一个使用Spring AOP的简单示例,展示了如何定义和应用切面。
129 1
什么是AOP面向切面编程?怎么简单理解?
|
2月前
|
存储 缓存 Java
Spring高手之路23——AOP触发机制与代理逻辑的执行
本篇文章深入解析了Spring AOP代理的触发机制和执行流程,从源码角度详细讲解了Bean如何被AOP代理,包括代理对象的创建、配置与执行逻辑,帮助读者全面掌握Spring AOP的核心技术。
50 3
Spring高手之路23——AOP触发机制与代理逻辑的执行
|
1月前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
37 1
|
3月前
|
设计模式 Java 测试技术
spring复习04,静态代理动态代理,AOP
这篇文章讲解了Java代理模式的相关知识,包括静态代理和动态代理(JDK动态代理和CGLIB),以及AOP(面向切面编程)的概念和在Spring框架中的应用。文章还提供了详细的示例代码,演示了如何使用Spring AOP进行方法增强和代理对象的创建。
spring复习04,静态代理动态代理,AOP