zoukankan      html  css  js  c++  java
  • 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、事务自调用失效

    ---

  • 相关阅读:
    JZOJ5906 传送门
    JZOJ5907 轻功
    JZOJ5904 刺客信条
    JZOJ5347 遥远的金字塔
    JZOJ5344 摘果子
    JZOJ4742 单峰
    JZOJ4725 质数序列
    JZOJ2499 东风谷早苗
    JZOJ4737 金色丝线将瞬间一分为二
    最后的财产——模板大全
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/14668814.html
Copyright © 2011-2022 走看看