木心

毕竟几人真得鹿,不知终日梦为鱼

导航

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

 

 

 

 

 

 

 

 

 

 

 

 

---

posted on 2021-04-16 21:23  wenbin_ouyang  阅读(411)  评论(0编辑  收藏  举报