深入理解SpringAOP的实现原理之代理对象的生成

一、Spring AOP概念

AOP(Aspect-Oriented Programming)面向切面或者面向方面编程的简称,将一些分散在对象或者类中的与业务逻辑无关的代码分离出来进行独立的管理编码,例如日志,事务处理,异常等。几个相关的重要概念:
1、方面/切面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子。方面用Spring的 Advisor或拦截器实现。
2、连接点(Joinpoint): 程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
3、Advice(通知):定义连接点做什么,为切面增强提供织入接口。如BeforeAdivice、AfterAdvice、ThrowsAdvice,其中前两者分别实现了before()和AfterRunning()回调方法,而后者则通过反射机制完成。
4、Pointcut(切点):决定Advice通知应该作用于哪个连接点,也就是说通过Pointcut来定义需要增强的方法的集合,其通常意味着标识方法。对于Pointcut的判断功能,具体是由一个返回得MethodMatcher来完成,由它判断是否要对当前方法进行增强,或者是否需要对当前调用方法应用配置好的Advice通知。
5、Advisor(通知器):用于结合目标对象的切面增强设计(Advice)和关注点设计(Pointcut),通过Advisor,可以定义应该使用哪个通知并在哪个关注点使用它。

二、两种动态代理

Spring AOP的设计理念,便是将一些与业务逻辑无关的关注点分离出来,例如,当我之时某些方法之时,我需要知道方法执行前后的日志信息,同时希望能够尽可能的减少代码量,该如何去处理?自然而然会想到代理模式,对于某个对象的调用,转而去访问它的代理对象,而无需知道它的存在,使对象对于调用者而言是完全透明的。相信大家都对代理模式有过一定的了解,其中主要有静态代理以及动态代理,静态代理所代理的对象在运行之前就必须确定,因此针对某些特定的业务场景,动态代理将是最完美的选择。
JDK动态代理:
一个Hello接口,里面定义了一个sayHello()方法
这里写图片描述
实现类
这里写图片描述
代理类

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值