动态代理类是java虚拟机自动创建的,这需要给虚拟机传递接口,让虚拟机知道自己要创建的是什么动态类。在程序中要让虚拟机创建动态代理类一般调用方法:static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) Class<?>[] interfaces参数就是表示接口的Class数组, ClassLoader loader就是接口的类加载器,方法呢返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序 。
例如:- private static Object getProxy(final Object target,final Advice advice)
- {
- Object proxy3=Proxy.newProxyInstance(target.getClass().getClassLoader(),
- target.getClass().getInterfaces(),
- new InvocationHandler(){
- public Object invoke(Object proxy, Method method,Object[] args)throws Throwable
- {
-
- advice.beformethod();
- Object retVal=method.invoke(target, args);
- advice.aftermethod();
- return retVal;
- }
- });
- return proxy3;
- }
复制代码 这个方法的target就是需要的代理的接口,advice就是需要给接口中的方法添加的系统功能的实例对象。动态代理类有系统自动生成方便了我们对方法的功能的增强,满足我们的需求,很实用。 |