知识温故:jdk动态代理
以下是自己的小理解做的大概原理图。
被代理对象实现的接口:
public interface UserDao {
int add(int a,int b);
int getId(int id);
}
被代理对象:
public class UserDaoImpl implements UserDao {
@Override
public int add(int a, int b) {
return a+b;
}
@Override
public int getId(int id) {
return id*3;
}
}
主类,获取代理对象,执行方法。
public static void main(String[] args) {
//声明被代理对象
UserDaoImpl userDaoImpl= new UserDaoImpl();
//传入类加载器、接口集合、invocationHandler信息,获取代理对象
UserDao user = (UserDao) Proxy.newProxyInstance(UserDaoImpl.class.getClassLoader(),
UserDaoImpl.class.getInterfaces(), new MyInvocationHandler(userDaoImpl));
int add = user.add(2, 3);
System.out.println(add);
int id = user.getId(3);
System.out.println(id);
}
调用处理程序接口实现类:
class MyInvocationHandler implements InvocationHandler {
Object obj;
public MyInvocationHandler(Object obj) {
this.obj=obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("当前方法:"+method.getName()+",参数是:"+ Arrays.toString(args));
return method.invoke(obj, args);
}
}
输出结果:
当前方法:add,参数是:[2, 3]
5
当前方法:getId,参数是:[3]
9