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