zoukankan      html  css  js  c++  java
  • jdk代理

    接口:
    public interface IUserService {
    
        public void saveUser(String username,String password);
        public void updateUser(String username,String password);
        public void deleteUser(String username);
        public String findUser();
    }
    目标对象:
    public class UserServiceImpl implements IUserService {
    
        @Override
        public void saveUser(String username, String password) {
            System.out.println("保存用户【"+username+"】,密码是【"+password+"】");
        }
    
        @Override
        public void updateUser(String username, String password) {
            System.out.println("更新用户【"+username+"】,密码是【"+password+"】");
        }
    
        @Override
        public void deleteUser(String username) {
            System.out.println("删除用户【"+username+"】");
        }
    
        @Override
        public String findUser() {
            System.out.println("查询用户,返回王老五");
            return "王老五";
        }
    
        
    }
    代理对象:
    public class JdkDaili implements InvocationHandler{
        Object userServiceImpl;
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable {
            // TODO Auto-generated method stub
    ffff
    if (method.getName()!=null&&(method.getName().contains("save")||method.getName().contains("update"))) {
                jiaoyan();
                System.out.println(proxy.getClass());
                System.out.println(method.getName());
                if (args.length>0&&args!=null) {
                    for (Object object : args) {
                        System.out.println(object);
                    }
                }
            } object o=method.invoke(userServiceImpl, args);//放在此处是,先执行代理,在执行目标对象的方法,如果想后执行代理,需要把这句话放入黄色区域
    return o; } public Object createrDaiLi(Object userServiceImpl) { this.userServiceImpl=userServiceImpl; return Proxy.newProxyInstance(this.userServiceImpl.getClass().getClassLoader(), this.userServiceImpl.getClass().getInterfaces(), this ); } } 测试: public static void main(String[] args) { //需求:在访问保存和更新的方法之前,先让你执行一个校验,使用代理对象完成 JdkDaili jdkDaili=new JdkDaili();
    //用目标对象创建代理对象 IUserService iService
    =(IUserService) jdkDaili.createrDaiLi(new UserServiceImpl());
    //代理对象执行 代理类里面的invoke()方法,返回return method.invoke(目标对象, 目标对象的方法的参数); iService.saveUser(
    "hgiohr", "51684"); }
  • 相关阅读:
    10月17日学习日志
    10月10日学习日志
    10月15日学习日志
    ERP临时汇报打草稿
    锁定字段的几个方法
    Mvc model验证总结
    Html5 WebSocket详细介绍
    C#连接Oracle数据库的方法(System.Data.OracleClient、Oracle.DataAccess.Client也叫ODP.net、Oracle.ManagedDataAccess.dll)
    MVC Ajax调用Action时OnActionExecuting RedirectResult 无法跳转的处理办法
    C#调用存储过程中事务级临时表返回DataTable列乱序解决办法
  • 原文地址:https://www.cnblogs.com/baijin05/p/5053979.html
Copyright © 2011-2022 走看看