• 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"); }
  • 相关阅读:
    《一线架构师》之Refined Architecture阶段
    可修改性战术分析
    上周学习总结
    软件质量属性之可修改性
    《信息领域热词分析》实现六种质量属性
    质量属性的六个常见属性应用场景(淘宝篇)
    软件架构师如何工作
    信息领域热词分析
    结合ssh谈MVC架构模式
    PythonCPPJava的异同
  • 原文地址:https://www.cnblogs.com/baijin05/p/5053979.html
Copyright © 2020-2023  润新知