Java 动态代理 (JDK自带代理)
来源:互联网 发布:郴州金科软件 编辑:程序博客网 时间:2024/06/06 00:29
java jdk反射自带动态代理,但只支持接口的实现代理,spring的AOP的底层实现就是使用了动态代理。
接口:
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自带代理)
- Java动态代理-JDK自带实现
- java动态代理一(java自带动态代理)
- jdk自带的动态代理说明
- Jdk自带的动态代理技术
- 代理模式-动态代理Demo(JDK自带的动态代理)
- Java代理(JDK动态代理)
- java代理(二)--jdk动态代理
- Java代理(三) JDK动态代理
- Java动态代理--jdk代理
- Java动态代理(JDK)
- Dynamic Proxy(JDK自带的动态代理实现)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- qt thread with movetothread
- 腾讯 iweibo Java API 1.2.1 补充头像和个人信息更新功能接口
- HTML+CSS中控制长字符串的自动换行问题
- [设计模式笔记]一. 创建型模式--3.Abstract Factory模式(二)
- 飞秋教程(飞秋应用管理器)
- Java 动态代理 (JDK自带代理)
- codeforces 132C Logo Turtle--- dp dfs
- hadoop 权限控制
- 用JavaScript隐藏控件的方法
- hdu 2609(字符串最小表示法)
- pppd
- Solr单节点索引和NRT源码分析
- 「Linux」davinci DMA
- 关于51地图中循环根据经纬度获取地理位置只显示一条数据的问题