了解掌握spring aop(上)

13 篇文章 0 订阅

     作为一名java开发人员,相信大家对spring aop这个机制都不陌生,日常写代码也好,都会或多或少的接触得到,刚好今天复习一下spring aop这一块的内容,就顺便在这里总结一下spring aop的一些概念。

     首先是关于spring aop的介绍,引用一下精通spring4.0书上介绍,spring aop指的是面向切面编程,通过横向抽取机制来分离重复性且与业务无关的代码,将这些代码都抽离到一个独立的模块,这样做的目的是保持业务代码的干净。

     这里有一些定义需要介绍:

      1.连接点(JointPoint)

       特定点是程序执行的某个特定位置,如类开始初始化前,类初始化后,类的某个方法调用前/调用后,一个类或者一段程序代码拥有边界性质的特定点,这些代码中的特定点就是被称为切点(引用精通spring4.0),打个比方,aop可以看成入侵者,如果要入侵某个国家的边防线,那连接点就是侵入的一个选择点。

       2.切点(PointCut)

       每个程序类有多个连接点,如果一个拥有两个方法的类,这两个方法都是连接点,即连接点是程序类中客观存在的事物,可以说边防线上可能有多个入侵点,而aop要做的就是通过切点去定位这些入侵点,所以切点和连接点之前是一对多的关系,一个切点可以匹配多个连接点。

       3.增强(Advice)

       织入目标类连接点上的一段代码,比如我们每次操作数据库都要去获取相应的数据库连接,对中间的事务进行相应的处理但是这些操作不能都放在业务类中,所以这一块也可以单独的抽取出来,抽取出来的代码就是aop中的增强代码,但是这一块需要结合aop切点的前提才能完成。

        4.目标对象(Target)

        增强逻辑的织入目标类,这个目标类有自己的业务实现代码,这些业务代码往往实现的是非切面的业务逻辑,与之对立的是增强代码,比如性能监视和事物控制,这些可以放在增强中。

        5.引介(Introduction)

        引介是一种特殊的增强,为类添加一些属性和方法,既是一个业务类原本没有实现某个接口,通过aop的引介功能,也可以动态的为该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类,常见的应用场景,可以参考引介增强,这个我在日常工作中也比较少接触。

      6.织入(weaving)

       织入是将增强添加到目标类的具体连接点上的过程,他和增强不同,它是一个过程,但是和增强逻辑也没有半毛钱关系,纯粹就是根据不同的技术将增强和目标对象织入的过程。

      常见的有下面3种:

      编译期织入

      类装载织入

      动态代理植入,spring采用的是第3种,AspectJ采用的是编译期织入和类装载织入

        7.代理(Proxy)

       类被aop织入后产生的结果类,JDK动态代理和CGlib也是通过代理实现的,这里可以扩展一下,JDK动态代理通过Proxy和InvocationHandler这两个核心类实现,这里有个前提,就是业务类必须是实现接口的,增强类需要实现InvocationHandler,生成目标类的代理对象然后实现相应的横切逻辑。而CGLib是通过生成子类在子类中采用方法拦截父类方法的调用来顺势织入横切逻辑,有些时候JDK Proxy会比较乏力,尤其是对于那些没有通过接口定义业务方法的类。

        8.切面(Aspect)

        由切点和增强组恒,包括了连接点和切割逻辑的定义。

         常见的增强方法有

         前置增强

         后置增强

         环绕增强

         异常抛出增强

         引介增强

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值