java动态代理的实现
2016-04-12 17:12
519 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">java动态代理的实现:</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
首先上一张代码结构图:
代码:
package com.test.interf; public interface UserDao { public int add(int x,int y); }
package com.test.impli; import com.test.interf.UserDao; public class UserDaoImpl implements UserDao { @Override public int add(int x, int y) { int sum = x + y; return sum; } }
package com.test.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Arrays; import com.test.interf.UserDao; public class UserProxy { private UserDao target; public UserProxy(UserDao target) { super(); this.target = target; } public UserDao getUserProxy() { UserDao proxy = null; ClassLoader loader = target.getClass().getClassLoader(); Class[] interfaces = new Class[]{UserDao.class}; InvocationHandler h = new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String methodName = method.getName(); System.out.println("start \\\\ methodName is:::::"+methodName + " args is::"+Arrays.toString(args)); Object result = null; result = method.invoke(target, args); System.out.println("end \\\\"); return result; } }; proxy = (UserDao) Proxy.newProxyInstance(loader, interfaces, h); return proxy; } }
package com.test.test; import com.test.impli.UserDaoImpl; import com.test.interf.UserDao; import com.test.proxy.UserProxy; public class Main { public static void main(String[] args) { UserDao ud = new UserDaoImpl(); ud = new UserProxy(ud).getUserProxy(); ud.add(1, 2); } }
运行结果:
start \\ methodName is:::::add args is::[1, 2]
end \\
相关文章推荐
- 【Spring】spring-mvc hibernate druid jdbc等数据源事务配置详解(解决注解事务不生效问题)
- java线程的几种状态
- Java读取properties文件
- Java Base64 类
- JAVA – 虚函数、抽象函数、抽象类、接口
- 使用 json_in_java
- java学习之反射
- java多线程系列:死锁及检测
- java持有对象-map(二)-追踪元素次数
- java四种访问权限修饰符
- 支付宝java后台接入简单流程
- java AES加密
- 关于Java8函数式编程你需要了解的几点
- [Java] 对象排序示例
- Java线程池的那些事
- Spring MVC让Web容器启动时自动执行代码
- Java 多线程处理任务的封装
- java 学习总结(二) 类的接口、继承与多态
- Struts2 入门学习笔记(一)——基本配置
- LeetCode(java)9. Palindrome Number