1、元数据解析:
AspectJAnnotationAdvisor和AspectJAfterAdvice等类用于解析和处理AspectJ注解,如@Aspect、@Before等。
AspectMetadata类存储了关于切面的元数据,包括切点、通知和切面的优先级。
2、代理类型选择:
AopProxyFactory负责选择合适的代理类型(JDK动态代理或CGLIB代理)。
3、通知的调用:
ReflectiveMethodInvocation类是MethodInvocation接口的实现,它封装了实际的方法调用。在AopProxy的invoke()方法中,会调用ReflectiveMethodInvocation.proceed()来执行通知链。
4、代理工厂:
ProxyFactoryBean和AdvisedSupport是创建代理对象的工厂,它们提供了配置和管理代理的接口。
5、目标源(TargetSource):
目标源表示代理的目标对象,可以是静态的(如单例bean)或动态的(如AOP代理的类)。TargetSource接口定义了获取和设置目标对象的方法。
6、代理的类型检查:
AopUtils类提供了一些静态方法,如isAopProxy(),用于检查对象是否是AOP代理。
7、自定义切点:
用户可以通过实现Pointcut接口创建自定义的切点逻辑,而不是仅限于AspectJ表达式。
8、代理的生命周期:
代理对象与被代理的目标对象具有相同的生命周期,由Spring容器管理。当bean销毁时,代理也会被销毁。
9、缓存支持:
Spring AOP支持缓存注解,如@Cacheable、@CacheEvict和@CachePut,这些注解的处理由CacheInterceptor实现。
9、异步执行:
Spring AOP也支持异步方法执行,通过@Async注解实现。AsyncExecutionInterceptor是处理异步调用的拦截器。
10、安全性集成:
Spring Security可以通过AOP实现权限检查,SecurityContextHolderAwareRequestFilter和SecurityContextHolderAwareRequestInterceptor是两个关键组件。
11、事件发布:
Spring的事件发布机制也可以看作是一种特殊的AOP应用,通过ApplicationEventPublisherAware和ApplicationEventPublisher接口实现。
每个组件都有其独特的功能和实现,理解它们之间的交互对于深入理解Spring AOP至关重要。要获得更多信息,可以查阅Spring AOP的官方文档和源码:Spring Framework 中文文档 (springdoc.cn)