java动态代理
来源:互联网 发布:下载cctv网络电视 编辑:程序博客网 时间:2024/06/05 10:08
在目前的Java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。
其实现主要通过是java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。
Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现
业务接口
package com.itmyhome.manager;public interface UserManager {public void addUser(); //增加用户public boolean delUser(int id); //删除用户}
业务接口实现
package com.itmyhome.manager;//UserManager接口的实现类public class UserManagerImpl implements UserManager {@Overridepublic void addUser() {// TODO Auto-generated method stubSystem.out.println("--addUser()--");}@Overridepublic boolean delUser(int id) {// TODO Auto-generated method stubSystem.out.println("--delUser()--");return true;}}
InvocationHandler实现 测试在调用接口方法前输出一行代码
package com.itmyhome.manager;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class ProxyHandler implements InvocationHandler {private Object obj; //要代理的对象public Object createProxy(Object obj){ //创建代理 this.obj = obj;return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable { //具体的处理策略 根据方法名判断// TODO Auto-generated method stubcheck();Object temp = method.invoke(this.obj, args);return temp;}public void check(){System.out.println("---check()---");}}
测试代码
package com.itmyhome.manager;public class Client {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubProxyHandler handler = new ProxyHandler();UserManager userManager = (UserManager)handler.createProxy(new UserManagerImpl());userManager.addUser();userManager.delUser(1);}}
- Java 代理,动态代理
- [Java] Java 动态代理
- java代理及动态代理
- java代理模式--动态代理
- Java静态代理、动态代理
- Java 代理之 动态代理
- Java 代理与动态代理
- java静态代理,动态代理
- 代理模式&java动态代理
- Java代理与动态代理
- Java静态代理动态代理
- JAVA代理模式--动态代理
- java 代理和动态代理
- JAVA动态代理 代理模式
- Java动态代理--jdk代理
- Java动态代理--cglib代理
- Java 代理与动态代理
- java代理模式-动态代理
- ASP.NET温故而知新学习系列之深度剖析ASP.NET架构—ASP.NET请求的处理过程(一)
- iphone-common-codes-ccteam源代码 CCNSCalendar.m
- iphone-common-codes-ccteam源代码 CCNSData.h
- 第六章堆排序之“保持堆的性质MAX-HEAPIFY”(迭代版,练习6.2-5)
- iphone-common-codes-ccteam源代码 CCNSData.m
- java动态代理
- iphone-common-codes-ccteam源代码 CCNSDate.h
- iphone-common-codes-ccteam源代码 CCNSDate.m
- iphone-common-codes-ccteam源代码 CCNSEnumerator.h
- VS2005新建Win32程序时,提示MSVCR80D.dll错误 解决方案
- iphone-common-codes-ccteam源代码 CCNSEnumerator.m
- iphone-common-codes-ccteam源代码 CCNSLocale.h
- 动态规划 杭电2571
- 2011百校联动“菜鸟杯”程序设计公开赛&&Bacon's Cipher