基于接口的动态代理
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理就是java的动态代理机制,所以本篇随笔就是对java的动态机制进行一个回顾。
在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。首先我们先来看看java的API帮助文档是怎么样对这两个类进行描述的:
普通案例,直接上代码
package proxydemo; public class actor { /* * 方法一,普通演员 */ public void basicActor(float money) { System.out.println("给钱干活:"+money); } /* * 方法二:高危演出 */ public void dangerActor(float money) { System.out.println("给钱干活:"+money); } }
package proxydemo; public class client { public static void main(String[] args) { actor a=new actor(); a.basicActor(100f); a.dangerActor(300f); } }
以上是普通实现方式,如何基于动态代理实现呢?
package proxydemo; public interface IActor { /* * 方法一,普通演员 */ public void basicActor(float money); /* * 方法二:高危演出 */ public void dangerActor(float money); }
来个接口,写proxy
package proxydemo; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class client { public static void main(String[] args) { actor a=new actor(); // a.basicActor(100f); // a.dangerActor(300f); Proxy.newProxyInstance(a.getClass().getClassLoader(), a.getClass().getInterfaces(),new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO 自动生成的方法存根 return null; } } ); } }
未完待续,