Java:CGLib动态代理实现原始类的扩展

简介: Java:CGLib动态代理实现原始类的扩展

Github: https://github.com/cglib/cglib

依赖

<dependency>
  <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>3.3.0</version>
</dependency>

目标类

package com.demo.cgbib;
public class Dog {
    public void sayHello(String name){
        System.out.println("Hello " + name);
    }
}

方法拦截器

package com.demo.cgbib;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class LogInterceptor implements MethodInterceptor {
    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        System.out.println("before");
        // 调用父类方法,不是反射
        Object result = proxy.invokeSuper(obj, args);
        System.out.println("after");
        return result;
    }
}

测试类

package com.demo.cgbib;
import net.sf.cglib.proxy.Enhancer;
public class Demo {
    public static void main(String[] args) {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(Dog.class);
        enhancer.setCallback(new LogInterceptor());
        Dog dog = (Dog) enhancer.create();
        dog.sayHello("Tom");
    }
}

输出结果

before
Hello Tom
after

参考

CGLib动态代理

相关文章
|
3月前
|
Java
Java代码解释静态代理和动态代理的区别
### 静态代理与动态代理简介 **静态代理**:代理类在编译时已确定,目标对象和代理对象都实现同一接口。代理类包含对目标对象的引用,并在调用方法时添加额外操作。 **动态代理**:利用Java反射机制在运行时生成代理类,更加灵活。通过`Proxy`类和`InvocationHandler`接口实现,无需提前知道接口的具体实现细节。 示例代码展示了两种代理方式的实现,静态代理需要手动创建代理对象,而动态代理通过反射机制自动创建。
|
6月前
|
Java
Java中的反射与动态代理机制详解
Java中的反射与动态代理机制详解
|
6月前
|
设计模式 Java 程序员
解析Java中的动态代理与静态代理的区别
解析Java中的动态代理与静态代理的区别
|
8月前
|
监控 Java 开发者
掌握 Java 反射和动态代理
【4月更文挑战第19天】Java反射和动态代理提供强大功能和灵活性。反射允许运行时检查和操作类,获取类信息、动态调用方法,但可能带来性能损失和降低代码可读性。动态代理则用于创建代理对象,实现透明性和横切关注点分离,常用于日志、权限检查等。两者结合能实现更复杂功能。掌握这些技术能提升代码的灵活性和可扩展性,但也需注意性能和可读性。通过学习和实践,能更好地构建高效软件系统。
79 2
|
8月前
|
Java 应用服务中间件 API
Java 编程问题:七、Java 反射类、接口、构造器、方法和字段1
Java 编程问题:七、Java 反射类、接口、构造器、方法和字段1
91 0
|
8月前
|
Java API
Java 编程问题:七、Java 反射类、接口、构造器、方法和字段3
Java 编程问题:七、Java 反射类、接口、构造器、方法和字段
59 0
|
8月前
|
存储 Java 数据库连接
Java 编程问题:七、Java 反射类、接口、构造器、方法和字段4
Java 编程问题:七、Java 反射类、接口、构造器、方法和字段
50 0
|
8月前
|
存储 Java 编译器
Java 编程问题:七、Java 反射类、接口、构造器、方法和字段2
Java 编程问题:七、Java 反射类、接口、构造器、方法和字段2
88 0
|
8月前
|
安全 Java API
Java中的反射(通过反射获取类的结构、invoke方法、获取注解)
Java中的反射(通过反射获取类的结构、invoke方法、获取注解)
|
缓存 Java
java通过反射获取加了某个注解的所有的类
java通过反射获取加了某个注解的所有的类

热门文章

最新文章