动态代理的简单阐述

动态代理有俩种方式
1.jvm代理
2.第三方库代理cglib代理。
区别:前者被代理的类必须实现接口,后者被代理的类没有实现接口 。 使用cglib代理需要导入第三方jar包。
下面详细聊聊
jvm代理中,需要单独写一个类实现接口InvocationHandler,重写里面的invoke方法,这个类把代理对象回传过来,在这个方法中可以定义代理对象要做的事,
如:
invoke(Proxy proxy,Method method Object[] args){

//代理对象替被代理对象所做的事情。还可以额外添加一些方法。如:记录日志。
method.invoke(被代理的对象,args);
}

产生代理对象的过程如下:

Proxy.newProxyInstance(Loader,Infaceter,h);
这个方法需要三个参数分别代表:被代理类的类加载器,被代理类实现 的接口,invocationHandle实现类的的对象。

代理对象产生后,可以直接有代理对象调用被代理类中的方法,就会触发invocationHanle实现类中的invoke方法。

下面说说cglib代理
建一个MethodInterceptor的实现类,重写intercept方法,这个方法中有4个参数,(Object obj, Method method, Object[] args, MethodProxy proxy)以便在方法中使用。和invoke有点类似。
在这个方法中调用proxy.invokeSuper(obj,args);
//产生代理类的工具。
Enhancer enhancer = new Enhancer();
//加载那个被代理的类。
enhancer.setSuperclass(c);
//回传给mycglib(MethodInterceptor的实现类)那个类。
enhancer.setCallback(m);
//产生代理对象。
User p= (User)enhancer.create();
产生代理对象后,直接调用被代理类中的方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring AOP是一种面向切面编程(AOP)框架,它是Spring框架的一部分,允许您将切面(通常是横切关注点)织入到代码中,以实现横切逻辑和功能,例如:事务管理,安全,日志跟踪等。它使用代理来实现AOP,因此它可以拦截方法调用,以执行相应的逻辑。 ### 回答2: Spring AOP(Aspect-Oriented Programming)是一个面向切面编程的框架,它通过将横切关注点(Cross-Cutting Concerns)与业务逻辑代码分离,实现了对代码的解耦和复用。横切关注点,也就是在应用程序中多处重复出现的功能或行为,如日志记录、性能监测、事务管理等。 在Spring AOP中,通过定义切面(Aspect)来封装横切关注点,切面是一组相互关联的通知(Advice)和切点(Pointcut)的集合。通知定义了在什么时候、在哪个切点处执行何种操作,常见的通知类型有前置通知(Before)、后置通知(After)、返回通知(AfterReturning)、异常通知(AfterThrowing)和环绕通知(Around)。切点用来确定在哪些连接点上应用通知,可以使用切点表达式或者注解来定义。 使用Spring AOP的过程为: 1. 定义一个切面类,通过注解或者XML配置定义相应的通知和切点。 2. 将切面类声明为一个Bean,让Spring容器来管理它。 3. 在应用程序中,通过AOP代理来将通知织入到目标对象的连接点上。 总体来说,Spring AOP提供了一种轻量级、便捷的方式,帮助开发者通过配置来实现横切关注点的解耦和复用。相对于传统的面向对象编程,它使得软件系统更加模块化、可维护,并且可以提升代码的可读性和可测试性。不过需要注意的是,Spring AOP只能针对Spring管理的Bean进行代理,对于非Spring管理的对象无法实现代理。同时,切面的织入也会带来一定的运行时开销,因此在使用过程中需要权衡利弊。 ### 回答3: Spring AOP(Aspect-Oriented Programming)是Spring框架提供的一种面向切面编程的方式。它能够在程序的运行期间动态地将横切关注点(即与业务逻辑无关的重复代码)插入到目标对象的方法中。 在传统的面向对象编程中,我们把应用程序抽象成不同的类和对象。但是随着业务的复杂度增加,我们会发现,在不同的类和对象中有一些共同的行为,比如日志记录、事务处理、安全控制等。这些共同的行为称为横切关注点。使用传统的编程方式,我们会在每个需要添加横切关注点的方法中编写相应的代码,这样会导致大量的代码重复。 而Spring AOP通过在编译期或运行期动态地将横切关注点插入到目标对象的方法中,从而实现对横切关注点的统一管理。它基于代理模式实现,在目标对象的方法执行前、执行后或抛出异常时,将额外的逻辑(切面)插入到方法中。 通过使用Spring AOP,我们可以将横切关注点的代码单独封装到一个切面中,然后在配置文件中定义切面的逻辑,指定需要被切入的目标对象和方法。当程序运行时,Spring框架会根据配置自动生成代理对象,并动态地将切面逻辑织入到代理对象的方法中。这样就不需要手动编写大量的重复代码,提高了代码的维护性和可重用性。 总的来说,Spring AOP是一种实现横切关注点的机制,通过动态的代理技术实现将横切关注点插入到目标对象的方法中。它使得应用程序更加模块化,减少了重复代码的编写,提高了代码的可维护性和可重用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值