spring_AOP

 

——了解AOP:

  1、myeclipse的方法抽取快捷键:alt+shift+M

  2、 减少冗余的一种方法:使用工具类。

  3、织入:系统级业务插入到主业务中。

  4、AOP底层实现原理:工具类+动态代理(jdk动态代理/Cglib)。切面:交叉业务逻辑,或被插入的业务。切面就是增强代码。

     5、 AOP的实现:advice(完成简单织入),advisor(将advice作为属性,即对advice进行包装)

  6、连接点:可以被织入切面的方法,理论上业务接口中的方法都是连接点

     7、 切入点:实际被插入了切面的方法

——advice通知类型:

  1、前置通知:MethodBeforeAdvice

  2、后置通知:AfterReturningAdvice,后置通知可以获取获取返回值,但处理后无法将结果值保存

  3、环绕通知:MethodInterceptor,可以返回处理的结果

  4、异常通知:ThrowsAdvice,拥有四个可以实现的方法,也可以捕获自定义异常。

——advisor处理通知会增强所有的方法,而顾问可以进行选择性增强。

  1、名字匹配:匹配的是简单方法名

  2、正则匹配:匹配的是全限定符方法名,即实际匹配的方法名是,类路径+方法名

     》例如:execution(* *..Service.*.*(..))

 ——内部代理机制的选择:

  1、当实体类没有实现接口时,会自动使用cglib的动态代理。实现了接口时,回默认使用jdk的动态代理。
    》如果已经实现了接口,但却像使用cglib,需要设置特定属性。proxytargetClass = true/false。或者optimae

  ——传统AOP的代理工厂:普通proxyFactoryBean,defaultdvisorAutoProxyCreator,BeanNameAutoProxyCreator

    1、普通proxyFactoryBean缺点:一个目标对象就只能对应一个代理类(被限制于一对一关系);外部只能显示的获取代理对象,而不能获取到增强后的目标对象(因为用户真正需要的是目标对象,而不是一个代理对象,代理对象只是我们用于实现用户需求的一种方式)。

    2、自动代理生成器(defaultdvisorAutoProxyCreator。):用于解决factoryBean的缺陷。

      >此自动代理生成器实现了Bean后处理器beanPostPocessor。

      >缺点:只能使用顾问Advisor,不能选择目标对象;不能选择切面类型,只能是advisor;不能对advisor进行部分选择

    3、Bean名称自动代理生成器(BeanNameAutoProxyCreator):用于解决自动代理生成器的缺陷。

      》实现了Bean后处理器BeanPostProcess接口。

  ——AspectJ对AOP的实现(重点):

    1、AspectJ:属于一种框架

    2、通知类型:增加了最终通知。即在目标对象执行之后,该通知一定会执行。

    3、AspectJ的切入点:

      》通配符学习:*(任意),..(当前包及其子包),+(当前类或接口及其子类或实现类)

    3、基于注解的AOP实现:使用注解实现切面后,仍需要在配置文件中进行配置

      》前置通知可以拥有带参数JoinPoint的重载方法,

      》环绕通知:环绕通知可以处理拥有返回值的切点。

        >注解关键字:@Around
        >方法需要携带参数:

        >ProcessdingJoinPoint(用于获得目标方法),并且可以获得返回值,并将修改后的值返回。

      》切入点注解:@PointCut,对切入点进行注解,避免重复的使用通配符匹配切入点。

    4、Aop基于xml的实现:对应于基于注解的实现。

        》使用<aop:config>标签进行配置。

        》(pointcut)。在信息引导过程中,都是用域对象ref进行引导。

        》Aop基于xml的的总结:创建切面类,并在类中设置通知方法(前置通知,后置通知,环绕通知,异常通知,最终通知),然后在 spring的配置文件中使用<aop: …… >等多种标签配置对应的切面方法。在配置的过程中,切面方法必须与切点绑定

 

posted @ 2019-05-18 11:05  怪兽不纯粹  阅读(106)  评论(0)    收藏  举报