动态代理

1、写一个类(我们暂且管这个类叫:真实的类),让它实现了某一个接口(该接口自己随便定义)。

2、再写一个类(我们暂且管这个类叫:代理类),让它实现invocationhandler接口。在该类中定义一个Object类型的对象,以便用来存’第1步‘中的真实类new出来的实例。

在代理类中实现了invocathandler的invoke方法,在invoke方法中写 method.incoke(真实的类new出来的实例,真实的类中方法所对应的参数)

3、在一个新类中先创建一个真实类的实例。再创建一个代理类的实例(创建代理类的实例时,将真实类的实例作为参数传入代理类的构造方法中)。

4、用真实类实现的接口作类型,通过Proxy.newProxyInstance方法创建该类型对象。其中传入的参数依次为(代理类的实例.getClassLoader(),真实类的接口,代理类的实例)

5、第4步创建出的这个对象就称为代理对象,可以用该对象去调用该对象所对应类型中的方法(这里类型都是真实类实现的接口)

6、aop的实现,在第2步中,“method.incoke(真实的类new出来的实例,真实的类中方法所对应的参数)” 这个方法前后加入新的操作,新加的操作就会在执行“method.incoke(真实的类new出来的实例,真实的类中方法所对应的参数)” 的前后分别执行。

原文地址:https://www.cnblogs.com/BruceDu/p/7387111.html