跳至主要內容

悟空约 367 字大约 1 分钟...

1、使用 JDK 动态代理,使用 Proxy 类里面的方法创建代理对象

(1)调用 newProxyInstance 方法

方法有三个参数:

第一参数,类加载器 第二参数,增强方法所在的类,这个类实现的接口,支持多个接口 第三参数,实现这个接口 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 result = dao.add(1, 2);

        System.out.println("result:"+result);
    }

}
//创建代理对象代码

class UserDaoProxy implements InvocationHandler { //1 把创建的是谁的代理对象,把谁传递过来 //有参数构造传递

private Object obj;

   public UserDaoProxy(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));

//被增强的方法执行

Object res = method.invoke(obj, args); //方法之后 System.out.println("方法之后执行...."+obj); return res;

} }
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.3.0