cglib实现无接口代理

  使用情况:有时候我们需要为一个类建立代理对象,当执行原类的某种方法时,进行某些操作,但是这要求我们原来的类实现某种接口。如果原来的类没有实现任何的接口怎么实现代理哪?现在我们可以利用Cglib为任何的类产生代理对象,不管原来的类有没有实现接口,甚至我们可以使代理对象动态的实现任意接口。
  例子
     1、产生带拦截器的代理对象。
     2、产生带拦截器和继承接口的代理对象。
     3、产生带拦截器和拦截器过滤器的代理对象。

  包里的内容

     案例,依赖包。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cglib主要是用来代理,而不是接口Cglib是一个强大的高性能的字节码生成库,它可以在运行时动态生成指定的子,并用子对象替换原始对象,从而实现代理的效果。相比于Java JDK自带的动态代理Cglib不需要目标实现接口,因此更加灵活。 如果你想使用Cglib代理接口,可以通过以下步骤来实现: 1. 首先,需要引入Cglib库到你的项目中。可以使用Maven或者手动下载并导入jar包。 2. 定义一个作为目标对象的代理。这个需要继承`net.sf.cglib.proxy.MethodInterceptor`接口,并实现其中的`intercept`方法。 3. 在`intercept`方法中,你可以通过`MethodProxy`对象来调用目标对象的方法,并在调用前后添加需要的逻辑。 4. 使用`Enhancer`创建代理对象。`Enhancer`是Cglib库中的一个,它可以用来生成目标的子。 下面是一个简单的示例代码: ```java import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import java.lang.reflect.Method; public class InterfaceProxyExample { public static void main(String[] args) { TargetInterface target = new TargetClass(); TargetInterface proxy = (TargetInterface) createProxy(target); proxy.targetMethod(); } private static Object createProxy(Object target) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(target.getClass()); enhancer.setCallback(new MethodInterceptor() { @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { // 添加需要在目标方法前后执行的逻辑 System.out.println("Before target method"); Object result = proxy.invokeSuper(obj, args); System.out.println("After target method"); return result; } }); return enhancer.create(); } } interface TargetInterface { void targetMethod(); } class TargetClass implements TargetInterface { @Override public void targetMethod() { System.out.println("Executing target method"); } } ``` 在上述示例中,我们定义了一个`TargetInterface`接口,并有一个实现`TargetClass`。然后,我们通过Cglib创建了一个代理对象,并在代理对象的`intercept`方法中添加了在目标方法前后执行的逻辑。 需要注意的是,Cglib生成的代理是目标的子,因此无法直接代理接口,而是通过继承实现了目标接口代理实现接口代理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值