Java动态代理与Spring AOP中的Cglib动态代理详解

Java动态代理与Cglib在SpringAOP中的应用与比较

在Java编程中,动态代理是一种在运行时动态创建代理类及其对象的技术。通过动态代理,我们可以在不修改原有类代码的情况下,为这些类添加新的行为或功能。Java提供了两种主要的动态代理机制:基于接口的Java动态代理和基于类的Cglib动态代理。在Spring AOP(面向切面编程)中,Cglib动态代理扮演着重要角色。本文将详细讨论这两种动态代理的实现。

一、Java动态代理

Java动态代理主要依赖于java.lang.reflect包中的Proxy类和InvocationHandler接口。它要求被代理的对象必须实现一个或多个接口,因为动态代理生成的代理类也是这些接口的实现类。

1.InvocationHandler接口

InvocationHandler接口定义了一个invoke方法,该方法在代理实例上的方法被调用时被调用。
public interface InvocationHandler {
   
     
    public Object invoke(Object proxy, Method method, Object[] args)  
        throws Throwable;  
}

其中,proxy是代理实例,method是被调用的方法,args是方法的参数。

2.代理实例

使用Proxy.newProxyInstance方法可以创建动态代理实例:

public static Object newProxyInstance(ClassLoader loader,  
                                      Class<?>[] interfaces,  
                                      InvocationHandler h)  
    throws IllegalArgumentException

其中,loader是类加载器,interfaces是代理类要实现的接口列表,h是调用处理器。

3.示例

假设我们有一个接口HelloService和一个实现类HelloServiceImpl:

public interface HelloService {
   
     
    void sayHello();  
}  
  
public class HelloServiceImpl implements HelloService {
   
     
    @Override  
    public void sayHello() {
   
     
        System.out.println("Hello, world!");  
    }  
}
现在,我们想要为HelloService添加日志功能,但不修改HelloServiceImpl的代码。我们可以创建一个动态代理:
public class 
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值