public interface UserDao {
int add(int a,int b);
}
public class UserDaoImpl implements UserDao{
@Override
public int add(int a, int b) {
System.out.println("add方法执行了....");
return a+b;
}
}
package com.zmuxi.spring5;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//JDK动态代理
// userDaoImpl是被代理对象
public class JDKProxy {
public static void main(String[] args) {
/**
* 第一个参数:类加载器,可以任意一个类
* 第二个参数:接口,被代理类实现的接口
* 第三个参数:handler,创建一个类实现提供的接口,该类也是代理对象
*/
Class[] interfaces={UserDao.class};
//newProxyInstance 这个方法返回值为 代理对象
UserDao userDao = (UserDao) Proxy.newProxyInstance(JDKProxy.class.getClassLoader(),
interfaces, new UserDaoProxy(new UserDaoImpl()));
userDao.add(2, 8);
}
}
//创建 代理对象
class UserDaoProxy implements InvocationHandler{
private Object object;
public UserDaoProxy(Object object){
this.object=object;
}
//增加被代理对象的方法代码逻辑
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("add方法之前....");
//被增强方法的执行,res为方法的返回值
Object res = method.invoke(object, args);
System.out.println(res);
System.out.println("add方法之后....");
return res;
}
}