首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java的动态署理实例

2012-10-25 
Java的动态代理实例首先写一个接口:package net.test.dynamicproxypublic interface UserManager {public

Java的动态代理实例

首先写一个接口:

package net.test.dynamicproxy;public interface UserManager {    public void addUser(String username,String password);    public void deleteUser(String id);}
?



然后写这个接口的实现类:

package net.test.dynamicproxy;public class UserManagerImpl implements UserManager {    @Override    public void addUser(String username, String password) {        System.out.println("增加的用户名:"+username+" 密码:"+password);    }    @Override    public void deleteUser(String id) {        System.out.println("删除用户");    }}然后再写一个代理类,这个类实现了InvocationHandler接口:package net.test.dynamicproxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class UserManagerHandler implements InvocationHandler {    private Object targetObject;//表示代理实例   /***返回一个代理实例*/    public Object newProxy(Object targetObject){        this.targetObject = targetObject;        return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this);    }/***这个代理类被实例化后会自动调用这个invoke(..)方法*/    @Override    public Object invoke(Object proxy, Method method, Object[] args)            throws Throwable {        checkRole();        Object returnValue = null;        try{            method.invoke(targetObject, args);//这个方法必须要写,否则就无法实现代理,表示调用代理类的方法        }catch(RuntimeException e){            System.out.println(e);        }        return null;    }    public void checkRole(){        System.out.println("--------------检查权限-------");    }}
?



测试:

package net.test.dynamicproxy;public class Client {    public static void main(String args[]){        UserManagerHandler handler = new UserManagerHandler();        UserManager manager = (UserManager)handler.newProxy(new UserManagerImpl());        manager.addUser("hahaha", "yyd");        manager.deleteUser("110");    }}
?



运行结果:

--------------检查权限-------
增加的用户名:hahaha 密码:yyd
--------------检查权限-------
删除用户

热点排行