动态代理

首先写一个接口:
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
--------------检查权限-------
删除用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值