Spring AOP

AOP编程

  1. 静态代理
    • 在真实主题之间,前后均可包一层,实现代理的额外拓展功能+真实主题的原来实现,目的是在不破坏原来真实主题的目标意图和功能下,对真实主题进行了功能加强和扩展。
    • 缺点:
    • 尽管能实现:在不改变原来代码的情况下,新增加了需要的功能。
    • 随之带来了新的问题:一个类对应一个接口,代理类也对应实现类同样的接口,虽然我们把散落在系统中各个方法都收集回笼到一块,但一个接口就要出来一个代理类导致数量膨胀,不利于管理
  2. JDK动态代理
    • 是基于接口实现的,也就是只能对该类所实现接口中定义的方法进行代理,整个系统中一份。
    • 通过反射类Proxy以及InvocationHandler回调接口实现的。
  3. CGLIB代理
    • 是一个功能强大,高性能的代码生成包,为没有实现接口的类提供代理。
    • 原理:动态生成一个被代理类的子类,子类重写被代理的类的所有不是final的方法。在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势植入横切逻辑。
    • 新增jar包,cglib-nodep-2.1_3.jar

AOP相关概念

  1. 横切性关注点
    • 加在主业务前后的内容称为“横切性关注点”。根据OOP编程原则,提供给多个地方调用的内容需要将它封装为一个方法,方法也不可能单独存在,需要存在一个类中,由此引入了后续概念。
  2. 通知(advice)
    • 将横向业务内容也即横切性关注点的内容封装为一个方法,这个方法称为“通知”,它可以放在主方法的前面,也可以放在后面。除此以外还有异常通知、环绕通知和最终通知。即被方法化的横切性关注点称为通知。
  3. 连接点(joinpoint)
    • 就是那些被拦截到的点,spring这些点就是方法。也就是主业务中的主要方法,每一个方法就是一个连接点,比如User类的CRUD就是4个连接点。
  4. 切入点(pointcut)
    • 就是要对那些方法进行拦截,是对需要拦截的joinpoint的定义。
  5. 切面(aspect)
    • 一个个封装了的方法称为advice,每一个方法均应该封装在一个类中,此外,在这些advice上也需要定义将这些通知用于那些方法前面后面,这些定义也封装在这个类中,称为切入点,它们以后作用于joinpoint将这些统一封装起来的类称为切面。公式表达:aspect=pointcut+advice
  6. 织入(weave)
    • 将aspect运用到代理的目标对象上并导致proxy创建的过程称为织入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值