• 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、事务自调用失效

    ---

  • 相关阅读:
    基于tensorflow的MNIST手写数字识别(二)--入门篇
    怎么自行HTTP的POST包头,需要使用json
    本地数据库(SQL Server)远程连接服务器端服务器
    在 Visual Studio 2010 中创建 ASP.Net Web Service
    VMware加载vmdk文件
    Android典型界面设计(5)——使用SlidingMenu和DrawerLayout分别实现左右侧边栏
    FatSecret Platform API
    Android典型界面设计(4)——使用ActionBar+Fragment实现tab切换
    IOS UITableView删除功能
    Android GUI之View测量
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/14668814.html
Copyright © 2020-2023  润新知