Java 动态代理 (JDK自带代理)
2013-08-09 11:21
232 查看
java jdk反射自带动态代理,但只支持接口的实现代理,spring的AOP的底层实现就是使用了动态代理。
接口:
实现类
代理类
测试
输出
源码下载:http://download.csdn.net/detail/programmer_sir/5898127
接口:
package com.hanyastar.demo; public interface IUsers { public void save(String username, String password); public void update(String id, String usrname, String password); }
实现类
package com.hanyastar.demo; public class UsersImpl implements IUsers{ public void save(String username, String password) { System.out.println("保存了一个新的用户信息。用户名是" + username + ",密码是:" + password); } public void update(String id, String usrname, String password) { System.out.println("修改了ID为" + id + "的用户信息,修改后的用户名为:" + usrname + ",密码为:" + password); } }
代理类
package com.hanyastar.demo.jdk; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * JDK动态代理。 * @created 2013-8-9 */ public class DynamicProxy implements InvocationHandler{ /** * <p>被代理的对象。</p> * @created 2013-8-9 */ private Object target; public DynamicProxy(Object target) { this.target = target; } /** * 调用对象。 * @param o 被代理的对象。 * @param method 被代理对象的方法。 * @param args 被代理对象的方法的参数。 * @return proxy result * * @throws Throwable * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) */ public Object invoke(Object o, Method method, Object[] args) throws Throwable { System.out.println("代理开始...."); Object result = method.invoke(target, args); System.out.println("代理结束..."); return result; } /** * <p>动态获得被代理的对象。</p> * @created 2013-8-9 */ public Object getProxy(){ // ClassLoader loader 类加载器 // Class<?>[] interfaces 得到全部的接口 // InvocationHandler InvocationHandler 接口的子类实例 return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } }
测试
package com.hanyastar.demo.jdk; import com.hanyastar.demo.IUsers; import com.hanyastar.demo.UsersImpl; /** * 测试动态代理。 * @created 2013-8-9 */ public class TestAOP { public static void main(String[] args) { // 向上造型 // 代理接口的实现类。 IUsers d = (IUsers)new DynamicProxy(new UsersImpl()).getProxy(); d.save("a", "b"); d.update("2", "aaa", "bbb"); } }
输出
代理开始.... 保存了一个新的用户信息。用户名是a,密码是:b 代理结束... 代理开始.... 修改了ID为2的用户信息,修改后的用户名为:aaa,密码为:bbb 代理结束...
源码下载:http://download.csdn.net/detail/programmer_sir/5898127
相关文章推荐
- Java动态代理-JDK自带实现
- 好记性不如烂笔头48-java拦截器-JDK自带动态代理和CGLIB效率比较(3)
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java_JDK动态代理学习笔记
- java动态代理(JDK和cglib)
- HOMEJAVAJDK动态代理代理与Cglib代理原理探究
- 《转》JAVA动态代理(JDK和CGLIB)
- java动态代理(JDK和cglib)
- Java反射之JDK动态代理实现简单AOP
- java jdk和cglib动态代理
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java JDK动态代理和cglib动态代理
- Java JDK 动态代理(AOP)使用及实现原理分析
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- 动态代理--java jdk
- Java 动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- java动态代理(JDK和cglib)
- java动态代理(JDK和cglib)
- Spring学习(四)—— java动态代理(JDK和cglib)
- (14) Java 动态代理(JDK)