打字猴:1.70046106e+09
1700461060
1700461061 //代理方法
1700461062
1700461063 public Object invoke(Object proxy,Method method,Object[]args)
1700461064
1700461065 throws Throwable{
1700461066
1700461067 //执行被代理的方法
1700461068
1700461069 return method.invoke(this.target,args);
1700461070
1700461071 }
1700461072
1700461073 }
1700461074
1700461075 非常简单,所有通过动态代理实现的方法全部通过invokve方法调用。DynamicProxy代码如代码清单12-28所示。
1700461076
1700461077 代码清单12-28 动态代理类
1700461078
1700461079 public class DynamicProxy<T>{
1700461080
1700461081 public static<T>T newProxyInstance(ClassLoader loader,Class<?>[]
1700461082
1700461083 interfaces,InvocationHandler h){
1700461084
1700461085 //寻找JoinPoint连接点,AOP框架使用元数据定义
1700461086
1700461087 if(true){
1700461088
1700461089 //执行一个前置通知
1700461090
1700461091 (new BeforeAdvice()).exec();
1700461092
1700461093 }
1700461094
1700461095 //执行目标,并返回结果
1700461096
1700461097 return(T)Proxy.newProxyInstance(loader,interfaces,h);
1700461098
1700461099 }
1700461100
1700461101 }
1700461102
1700461103 在这里插入了较多的AOP术语,如在什么地方(连接点)执行什么行为(通知)。我们在这里实现了一个简单的横切面编程,有经验的读者可以看看AOP的配置文件就会明白这段代码的意义了。我们来看通知Advice,也就是我们要切入的类,接口和实现如代码清单12-29所示。
1700461104
1700461105 代码清单12-29 通知接口及实现
1700461106
1700461107 public interface IAdvice{
1700461108
1700461109 //通知只有一个方法,执行即可
[ 上一页 ]  [ :1.70046106e+09 ]  [ 下一页 ]