Spring AOP—深入动态代理(通俗易懂)
    		       		warning:
    		            这篇文章距离上次修改已过425天,其中的内容可能已经有所变动。
    		        
        		                
                Spring AOP(面向切面编程)使用的动态代理技术,主要有两种方式:JDK动态代理和CGLIB动态代理。
JDK动态代理:
- 只能对实现了接口的类生成代理,不能针对类。
 - 使用java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。
 
CGLIB动态代理:
- 可以对类实现代理,不需要类实现接口。
 - 使用CGLIB库,通过继承要代理的类,重写其方法。
 
举例:
假设有一个接口和实现类:
public interface MyInterface {
    void doSomething();
}
 
public class MyImpl implements MyInterface {
    @Override
    public void doSomething() {
        System.out.println("原始方法执行");
    }
}使用Spring AOP创建代理对象:
@Configuration
@EnableAspectJAutoProxy
public class AopConfig {
    @Bean
    public MyImpl myImpl() {
        return new MyImpl();
    }
 
    @Bean
    public MyAspect myAspect() {
        return new MyAspect();
    }
}
 
@Aspect
public class MyAspect {
    @Before("execution(* com.example.MyInterface.*(..))")
    public void beforeAdvice(JoinPoint joinPoint) {
        System.out.println("前置通知:" + joinPoint.getSignature().getName());
    }
}在这个例子中,Spring会在运行时为MyImpl生成一个代理对象,当调用doSomething()方法时,会先执行MyAspect中定义的前置通知。这就是Spring AOP的基本使用方法,使得我们可以在不修改原始代码的情况下增加额外的行为,例如日志记录、事务管理等。
评论已关闭