实现jdk动态代理

谁借莪1个温暖的怀抱¢ 2022-09-24 09:24 230阅读 0赞

首先要对代理的类写接口,这里采用模拟的数据库添加数据的操作里增加权限校验,日志分析,(伪代码)

IUserDao.java

  1. package proxys;
  2. public interface IUserDao {
  3. void add();
  4. }

UserDao.java

  1. package proxys;
  2. public class UserDao implements IUserDao {
  3. @Override
  4. public void add() {
  5. System.out.println("保存数据");
  6. }
  7. }

代理之前需要将目标对象,封装到InvocationHandler 的子类中,调用目标的方法,在方法中添加其他操作

MyInvocationHandler.java

  1. package proxys;
  2. import java.lang.reflect.InvocationHandler;
  3. import java.lang.reflect.Method;
  4. public class MyInvocationHandler implements InvocationHandler {
  5. private Object object;
  6. public MyInvocationHandler(Object object) {
  7. this.object = object;
  8. }
  9. @Override
  10. public Object invoke(Object proxy, Method method, Object[] args)
  11. throws Throwable {
  12. System.out.println("权限校验");
  13. Object result = method.invoke(object, args);
  14. System.out.println("日志分析");
  15. return result;
  16. }
  17. }

接下来要测试代理类

  1. ProxyTest.java
  2. package proxys;
  3. import java.lang.reflect.Proxy;
  4. public class ProxyTest {
  5. public static void main(String[] args) {
  6. IUserDao dao=new UserDao();
  7. dao=(IUserDao) Proxy.newProxyInstance(dao.getClass().getClassLoader(),dao.getClass().getInterfaces(),new MyInvocationHandler(dao));
  8. dao.add();
  9. }
  10. }

发表评论

表情:
评论列表 (有 0 条评论,230人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JDK动态代理实现原理

    之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白。比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把

    相关 如何实现JDK动态代理

    代理模式: 代理模式给某个对象提供了一个代理对象,并由代理对象控制对原对象的引用。 代理分为静态代理和动态代理。 为何用代理? 不用代理时,在写实现接口类Use

    相关 jdk动态代理实现

    说jdk动态代理模式,先来说一下什么是代理模式,顾名思义,就是别人需要做的活让其他人代理做了。比较常见的是,我需要买火车票,我现在没有办法去火车站购买,找到离我最近的火车票代理