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: …… >等多种标签配置对应的切面方法。在配置的过程中,切面方法必须与切点绑定。

浙公网安备 33010602011771号