在 Spring 中,AOP(面向切面编程)可以通过动态代理实现。Spring AOP 支持两种主要的动态代理模式:JDK Proxy 和 CGLIB Proxy。这两种方式各有特点,适用于不同的场景。
1. JDK 动态代理
JDK Proxy 是基于 Java 原生的反射机制实现的,使用 java.lang.reflect.Proxy
类生成代理对象。JDK Proxy 只能对实现了接口的类进行代理,因此只适用于代理那些有接口的目标类。
特点:
- 基于接口:JDK Proxy 只能代理实现了接口的类。如果目标类没有实现接口,无法使用 JDK Proxy。
- 性能较好:由于 JDK Proxy 是基于 Java 原生的反射机制,生成的代理对象性能通常较为优秀。
- 代理方式:JDK Proxy 通过接口实现代理,所以目标类和代理类之间通过接口进行调用。
使用示例:
假设有一个接口 UserService
和其实现类 UserServiceImpl
:
public interface UserService {
void createUser();
void deleteUser();
}
public class UserServiceImpl implements UserService {
@Override
public void createUser() {
System.out.println("Creating user");
}
@Override
public void deleteUser() {
System.out.println("Deleting user"