• jdk动态代理失效,事务自调用失效


    1、jdk动态代理失效

      接口

    public interface UserDao {
        void add();
        void delete();
        void update();
        void find();
    }

      实现类

    public class UserDaoImpl implements UserDao {
    
        @Override
        public void add() {
            System.out.println("this: " + this); // com.oy.demo.UserDaoImpl@6bc7c054
            System.out.println("this: " + this.getClass().getName()); // com.oy.demo.UserDaoImpl
            this.find(); // 这里通过this调用find()方法, find()方法代理失效
            System.out.println("添加。。。");
        }
    
        @Override
        public void delete() {
            System.out.println("删除。。。");
        }
    
        @Override
        public void update() {
            System.out.println("修改。。。");
        }
    
        @Override
        public void find() {
            System.out.println("查询。。。");
        }
        
    //    @Override
    //    public String toString() {
    //        System.out.println("UserDaoImpl#toString()");
    //        return "UserDaoImpl#toString()";
    //    }
    
    }

       测试:jdk动态代理失效

    public static void main(String[] args) {
        final UserDao userDao = new UserDaoImpl();
    
        UserDao proxyUserDao = (UserDao) Proxy.newProxyInstance(userDao.getClass().getClassLoader(),
                userDao.getClass().getInterfaces(), new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        // System.out.println(proxy.getClass().getName()); // com.sun.proxy.$Proxy0
                        System.out.println("权限校验");
                        Object result = method.invoke(userDao, args);
                        System.out.println("日志记录");
                        return result;
                    }
                });
    
        System.out.println("动态代理对象的类型:" + proxyUserDao.getClass().getName()); // 动态代理对象的类型:com.sun.proxy.$Proxy0
        //System.out.println("动态代理对象:" + proxyUserDao.toString()); // toString也被代理了
        
        proxyUserDao.add();
    }

      打印结果:

    动态代理对象的类型:com.sun.proxy.$Proxy0
    权限校验
    this: com.oy.demo.UserDaoImpl@6bc7c054
    this: com.oy.demo.UserDaoImpl
    查询。。。
    添加。。。
    日志记录

      分析:proxyUserDao.add() 方法调用了this.find() 方法, find()方法代理失效。

    2、事务自调用失效

    ---

  • 相关阅读:
    已经菜到不行了 PAT 1010. Radix (25)
    容斥 或者 单调栈 hihocoder #1476 : 矩形计数 和 G. Snake Rana 2017 ACM Arabella Collegiate Programming Contest
    React的Context的使用方法简介
    canvas的进阶
    canvas的基础入门
    CSS3 中弹性盒模型--容器的属性
    creat-react-app搭建的项目中按需引入antd以及配置Less和如何修改antd的主题色
    D3.js 动画 过渡效果 (V3版本)
    D3.js(v3)+react 制作 一个带坐标轴与比例尺的折线图
    D3.js 弦生成器(V3版本)
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/14668814.html
Copyright © 2020-2023  润新知