有接口:使用JDK动态代理
没有接口:使用CGLIB动态代理
创建类的子类对象,增强类的方法
使用JDK动态代理实现方法的增强
使用JDK动态代理来实现对方法的增强(比如说方法之前加一步操作,或者方法执行后多加一步操作)
@Test
public 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;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("方法调用前...");
Object result = method.invoke(object, args);
System.out.println("方法调用后");
return result;
}
}