有接口:使用JDK动态代理
没有接口:使用CGLIB动态代理
创建类的子类对象,增强类的方法
使用JDK动态代理实现方法的增强
使用JDK动态代理来实现对方法的增强(比如说方法之前加一步操作,或者方法执行后多加一步操作)
@Testpublic void test3(){UserDao userDao = new UserDaoImpl();Object proxyInstance = Proxy.newProxyInstance(Spring5Test2.class.getClassLoader(), userDao.getClass().getInterfaces(), new MyInvocationHandler(userDao));UserDao dao = (UserDao) proxyInstance;dao.add();}
class MyInvocationHandler implements InvocationHandler{private Object object;public MyInvocationHandler() {}public MyInvocationHandler(Object object) {this.object = object;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("方法调用前...");Object result = method.invoke(object, args);System.out.println("方法调用后");return result;}}
