有接口:使用JDK动态代理

创建接口实现类的代理对象,增强类的方法

没有接口:使用CGLIB动态代理

创建类的子类对象,增强类的方法

使用JDK动态代理实现方法的增强

使用JDK动态代理来实现对方法的增强(比如说方法之前加一步操作,或者方法执行后多加一步操作)

  1. @Test
  2. public void test3(){
  3. UserDao userDao = new UserDaoImpl();
  4. Object proxyInstance = Proxy.newProxyInstance(Spring5Test2.class.getClassLoader(), userDao.getClass().getInterfaces(), new MyInvocationHandler(userDao));
  5. UserDao dao = (UserDao) proxyInstance;
  6. dao.add();
  7. }
  1. class MyInvocationHandler implements InvocationHandler{
  2. private Object object;
  3. public MyInvocationHandler() {
  4. }
  5. public MyInvocationHandler(Object object) {
  6. this.object = object;
  7. }
  8. @Override
  9. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  10. System.out.println("方法调用前...");
  11. Object result = method.invoke(object, args);
  12. System.out.println("方法调用后");
  13. return result;
  14. }
  15. }