Java回炉重造(二)静态代理

Java回炉重造(二)静态代理

说明

代理就是中介,通过代理访问一个类可以获得这个类的增强版。比如一个UserDao接口的实现类UserDaoImpl的login方法,通过设置UserDaoImpl的代理类,在login方法前加上安全性检测代码,在login方法后加上日志记录代码,再调用代理类的login方法时就会执行带有安全检测和日志记录的login方法。不但不会污染原来的login方法,更改代理中的login也不会影响程序,有点AOP面向切面编程的意思。

代码运行结果:

这里写图片描述

代码

UserDao.java

package cn.pangpython.acl.proxy;
/**
 * 用户数据库操作接口类
 * @Project ApacheCommonsLearn
 * @Package cn.pangpython.acl.proxy
 * @Author pangPython
 * @Time 上午8:33:47
 */
public interface UserDao {
    /*
     * 登录方法
     */
    public boolean login(String UserName,String PassWord);

}

UserDaoImpl.java

package cn.pangpython.acl.proxy;
/**
 * @Project ApacheCommonsLearn
 * @Package cn.pangpython.acl.proxy
 * @Author pangPython
 * @Time 上午8:38:26
 */
public class UserDaoImpl implements UserDao {

    @Override
    public boolean login(String UserName, String PassWord) {
        System.out.println("用户名:"+UserName+"密码:"+PassWord+" ===正在登录!");
        return true;
    }

}

UserDaoProxy.java

package cn.pangpython.acl.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @Project ApacheCommonsLearn
 * @Package cn.pangpython.acl.proxy
 * @Author pangPython
 * @Time 上午8:41:03
 */
public class UserDaoProxy implements InvocationHandler {

    private Object target;

    public UserDaoProxy(Object target) {
        super();
        this.target = target;
    }

    @Override
    public Object invoke(Object object, Method method, Object[] args) throws Throwable {
        System.out.println("检查登录参数...");
        Object obj = method.invoke(target, args);
        System.out.println("记录登录日志...");
        return obj;
    }

}

TestProxy.java

package cn.pangpython.acl.proxy;

import java.lang.reflect.Proxy;

/**
 * @Project ApacheCommonsLearn
 * @Package cn.pangpython.acl.proxy
 * @Author pangPython
 * @Time 下午3:45:11
 */
public class TestProxy {

    public static void main(String[] args) {
            UserDaoProxy userDaoProxy = new UserDaoProxy(new UserDaoImpl());
            UserDao userDao = (UserDao) Proxy.newProxyInstance(UserDaoImpl.class.getClassLoader(), UserDaoImpl.class.getInterfaces(), userDaoProxy);
            userDao.login("test", "test");
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值