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"); }
  • 相关阅读:
    Delphi 与 VC 共享接口和对象
    Delphi线程类 DIY(把类指针作为参数传进去,就可以执行类里面的方法啦)
    delphi 在多线程中使用 CreateOleObject 导致失败(一定要使用CoInitialize和CoUninitialize,举例查询WMI)
    delphi调用LUA函数来处理一些逻辑
    后台管理系统
    .NET平台机器学习
    kafka
    一些技术视频资源
    异步
    CQRS(命令查询职责分离)和 EDA(事件驱动架构)
  • 原文地址:https://www.cnblogs.com/baijin05/p/5053979.html
Copyright © 2011-2022 走看看