`

Java的动态代理实例

    博客分类:
  • 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
--------------检查权限-------
删除用户

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics