zoukankan      html  css  js  c++  java
  • 动态代理

    主营业务接口:

    public interface IUserManger {
        public void AddUser(String UserName, String Password);
        public void ModifyUser(int id, String UserName, String Password);
    
    }

    接口实现类:

    public class UserManagerImpl implements IUserManager{
    
    
        public void addUser(String username, String password) {
            System.out.println("=========UserManagerImpl.addUser()===========");
        }
    
        public void modifyUser(int id, String username, String password) {
            System.out.println("=========UserManagerImpl.modifyUser()===========");
        }
    }

    继承invocationHandler的类:

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    //帮助我们动态的生成代理对象JDK1.5
    
    public class SecurityHandler implements InvocationHandler {
    
        private Object targetObject;//目标对象
    
        //生成代理对象
        public Object proxyInstance(Object paramObject){
            this.targetObject = paramObject;
            return Proxy.newProxyInstance(
                    this.targetObject.getClass().getClassLoader(),
                    this.targetObject.getClass().getInterfaces(),
                    this);//得到目标加载器实现invocationHandler的类,也就是本类
        }
    
        //传入代理对象,目标对象的方法,方法参数,代理方法与目标方法都实现了IUserManager
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            Object resultObj = null;
            checkSecurity();
            try{
                resultObj = method.invoke(this.targetObject,args);//递归调用
            }catch (Exception ex){
                ex.printStackTrace();
            }
            return resultObj;
        }
    
        public void checkSecurity(){
            System.out.println("=======checkSecurity()==========");
        }
    }

    测试类:

    public class Client {
    
        public static void main(String[] args) {
            SecurityHandler securityHandler = new SecurityHandler();
            IUserManager iUserManager = (IUserManager) securityHandler.proxyInstance(new UserManagerImpl());
            iUserManager.addUser("abc","123");
    
        }
    }
  • 相关阅读:
    typeof 和 Object.prototype.toString 的区别
    获取地理信息的JavaScript 库 -- YQL Geo
    关于html5手机
    我看过的书的示例网站
    解决跨浏览器问题网站收集
    【docker】docker初试与填坑
    sunJCE or ibmJce,was服务器下使用des的注意点
    cxf-webservice-在was6服务器上运行
    微星b85(b85i b85-gaming) 系列dsdt
    IE10的bug?disabled button如何触发事件
  • 原文地址:https://www.cnblogs.com/hetaoyuan/p/12511141.html
Copyright © 2011-2022 走看看