Java开发-面试题-0035-Spring代理方式有哪些

Java开发-面试题-0035-Spring代理方式有哪些

更多内容欢迎关注我(持续更新中,欢迎Star✨)

Github:CodeZeng1998/Java-Developer-Work-Note

(技术)微信公众号:CodeZeng1998

(生活)微信公众号:好锅

其他平台:CodeZeng1998好锅


Spring 中的代理方式主要有两种:JDK 动态代理CGLIB 代理。两者在 Spring AOP 和 事务管理 中都被广泛使用。下面是对这两种代理方式的详细说明:


1. JDK 动态代理

概念:

JDK 动态代理是基于 Java 的 java.lang.reflect.Proxy 类和 InvocationHandler 接口来实现的。它只针对接口进行代理,因此代理类必须实现某个接口。


工作原理:
  • JDK 动态代理通过在运行时生成一个代理类,该代理类实现了目标对象所实现的接口。
  • 当代理对象调用接口中的方法时,代理类会拦截该方法调用,并将其交由 InvocationHandler 处理。
  • InvocationHandler 中,开发者可以定义代理逻辑,例如方法执行前后增强、权限检查、事务管理等。

特点:
  • 只能代理实现了接口的类。
  • 代理是基于接口调用的,因此目标对象必须实现一个或多个接口。
  • 代理类是在运行时动态生成的,无需在编译时定义。

使用场景:

Spring 会优先选择使用 JDK 动态代理,前提是目标类有实现接口,比如通过 AOP 进行事务控制时,常见的 service 层使用的是接口。


示例代码:
public interface Service {
   
   
    void perform();
}

public class ServiceImpl implements Service {
   
   
    @Override
    public void perform() {
   
   
        System.out.println("Performing service operation...");
    }
}

public class ServiceInvocationHandler implements InvocationHandler {
   
   
    private final
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值