动态代理机制——反射

文章介绍了动态代理的概念,通过MyBatis课程中的静态代理、JDK动态代理和CGLIB子类代理进行讲解。示例中展示了如何使用ProxyFactory创建动态代理对象,实现代理功能,如在方法调用前后添加额外操作。此外,还提到了SpringAOP在事务管理和异常处理中的应用,如环绕通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前接触过的动态代理

动态代理的实现依赖反射机制

  1. mybatis课程中学的静态代理、jdk动态代理、cglib子类代理;

SuperLiu(目标对象)实现了Service(业务接口)

通过反射机制获取被代理对象


/**
 * 工厂类
 */
public class ProxyFactory {
    //成员变量设计为接口
    Service target;

    //传入目标对象
    public ProxyFactory(Service target) {
        this.target = target;
    }

    //返回动态代理对象
    public Object getAgent(){

      return Proxy.newProxyInstance(target.getClass().getClassLoader(),
              target.getClass().getInterfaces(),
              //它就类似于Agent的功能,代理的功能和目标对象的业务功能调用在这
              //实现:匿名内部类
              new InvocationHandler() {
               /*   @Override
                  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

                  }*/
                     @Override
                  public Object invoke(
                          //创建代理对象
                          Object proxy,
                          //method就是目标方法 sing(),show() 反射机制
                          Method method,
                          //目标方法的参数
                          Object[] args)
                          throws Throwable {
                      //代理功能
                      System.out.println("预定时间");
                      System.out.println("预定场地");

                      //主业务功能***
                     // target.sing();写死了
                      Object obj = method.invoke(target, args);

                      //代理功能
                      System.out.println("结算费用");

                      return obj;//obj是目标方法的返回值
                  }
              }
      ) ;  //return结束
/*  三个参数
        ClassLoader loader,
        Class<?>[] interfaces,
        InvocationHandler h

*/
    }

}

2、spring Aop 例如aspectj的环绕通知、事务

3、 springboot中的统一异常处理(也属于spring aop


@ExceptionHandler(SQLIntegrityConstraintViolationException.class)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值