1.使用JDK动态代理,使用Proxy类里面的方法

(1)调用newProxyInstance方法
![]()
方法由三个参数
(1)第一个参数,类加载器
(2)第二个参数,被代理类实现的接口(数组形式可以多个)
(3)第三个参数,实现这个接口InvocationHandler,创建代理对象,写增强方法。
2.JDK动态代理方法
(1)创建接口,定义方法
public interface UserDao {
public int add(int a,int b);
public String update(String id);
}
(2)创建接口实现类,实现方法
public class UserDaoImpl implements UserDao {
@Override
public int add(int a, int b) {
return a+b;
}
@Override
public String update(String id) {
return id;
}
}
(3)使用Proxy类创建接口代理对象
public class JDKProxy {
public static void main(String[] args) {
// 创建接口的代理对象
Class[] interfaces = {UserDao.class};
//匿名内部类
// Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces, new InvocationHandler() {
// @Override
// public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// return null;
// }
// });
UserDaoImpl userDao =new UserDaoImpl();
UserDao dao = (UserDao) Proxy.newProxyInstance(JDKProxy.class.getClassLoader(),interfaces,new UserDaoProxy(userDao));
int res = dao.add(1,2);
System.out.println(res);
}
}
//创建代理对象代码
class UserDaoProxy implements InvocationHandler{
// 1.把创建的是谁的代理对象,把谁传递过来
// 有参数构造传递
private Object obj;
public UserDaoProxy(Object object){
this.obj = object;
}
//增加的逻辑
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 方法之前做个处理
System.out.println("方法之前执行。。。。"+method.getName()+":传递的参数"+Arrays.toString(args)+args[0]);
// 被增强的方法执行
Object res = method.invoke(obj,args);
// 方法之后做个处理
System.out.println("在方法之后执行");
return res;
}
}版权声明:本文为weixin_46543456原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。