失效链接处理 |
Spring的动态代理开发 PDF 下载
本站整理下载:
相关截图:
主要内容:
AOP开发步骤
o原始对象
o额外功能
方法一:MethodBeforeAdvice接口
说明:额外的功能书写在接口的实现中,运行在原始方法执行之前运行额外功能。
例子
方法二:MethodInterceptor(方法拦截器)
说明:额外功能可以根据需要运行在原始方法执行 前、后、前后。
例子
方法三 @Around 注解【 <aop:aspectj-autoproxy/> 告知Spring基于注解进行AOP编程】
例子:
o切入点 <aop:pointcut id="pc" expression="execution(* *(..))"/>
表达式
方法切入点表达式
o例子一:所有方法
o例子二:对指定的方法作为切入点
o例子三:有两个字符串类型的参数 作为切入点
o例子四:精准方法切入点限定
类切入点表达式
o例子一:
o例子二:
包切入点表达式
o例子:
切入点函数
execution
args
within
@annotation
切入点函数逻辑运算
and
or
o组装切面
方法一 基于配置
方法二 基于注解
java动态代理实现
oJDKProxy
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
例子:
oCglib
通过cglib方式创建动态代理对象
例子
Spring 工厂如何加工原始对象
o实现:BeanPostProcessor
o思路
AOP开发中的一个坑
oClass A{ a{} b{}} 同一个类中a方法调用b()方法,因为是调用的原始方法,不会生成代理对象。
解决:
方法一 继承 ApplicationContextAware 方法
方法二:可以用AOPContxt
判断一个Bean是否是AOP代理对象可以使用如下三种方法
oAopUtils.isAopProxy(bean) : 是否是代理对象;
oAopUtils.isCglibProxy(bean) : 是否是CGLIB方式的代理对象;
AopUtils.isJdkDynamicProxy(bean) : 是否是JDK动态代理方式的代理对象;
|