首页 > 其他 > 详细

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

时间:2021-04-17 10:41:52      阅读:56      评论:0      收藏:0      [点我收藏+]

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

 

 

 

 

 

 

 

 

 

 

 

 

---

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

原文:https://www.cnblogs.com/xy-ouyang/p/14668814.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!