@EnableAspectJAutoProxy和@Aspectj 切面 在spring容器中工作原理详解

@EnableAspectJAutoProxy
这个注解是spring启用在自己的容器中注册了一个组件

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(AspectJAutoProxyRegistrar.class)
public @interface EnableAspectJAutoProx

AspectJAutoProxyRegistrar就是在spring注册了这个类,这个类实现了ImportBeanDefinitionRegistrar
重写registerBeanDefinitions方法,

AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry);
即注册了个应该beanName为org.springframework.aop.config.internalAutoProxyCreator      对象值为AnnotationAwareAspectJAutoProxyCreator的

AnnotationAwareAspectJAutoProxyCreator extends AspectJAwareAdvisorAutoProxyCreator extends AbstractAdvisorAutoProxyCreator extends AbstractAutoProxyCreator

public abstract class AbstractAutoProxyCreator extends ProxyProcessorSupport
implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware

SmartInstantiationAwareBeanPostProcessor又实现InstantiationAwareBeanPostProcessor接口。
实现了InstantiationAwareBeanPostProcessor后置处理的接口 会再容器初始化完成bean以后执行器 后置处理器的before和after方法,BeanFactoryAware表示 其子类是可以拿到spring的 BeanFactory的,也就是所有bean的对象,不然你aspectj中怎么执行,被增强对象的 增强方法,因为增强的方法属于spring管理的对象的方法。(不是只接new 对象调用的方法)
spring的源码片段

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(String, RootBeanDefinition, Object[])
 try {	//给后置处理器一个机会返回一个目标对象的代理,这个就是给后置处理器来生成代理的方法。
		// Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.
		Object bean = resolveBefor
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
@EnableAspectJAutoProxy与@Aspect注解的关系是,@EnableAspectJAutoProxy是一个Spring注解,用于启用AspectJ自动代理功能,而@Aspect是一个AspectJ注解,用于定义切面类。当我们在Spring环境使用@EnableAspectJAutoProxy注解时,它会扫描并注册带有@Aspect注解的切面类,从而实现切面的功能。同时,当Spring容器存在多个@Aspect或Advisor时,它们的顺序是根据@Order注解或实现Ordered接口来确定的。如果没有指定@Order或实现Ordered接口,那么它们的顺序将根据它们在容器注册的顺序来确定。 #### 引用[.reference_title] - *1* *3* [26.spring系列- @EnableAspectJAutoProxy、@Aspect通知顺序详解](https://blog.csdn.net/qq_32062699/article/details/109114650)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [@EnableAspectJAutoProxy和@Aspectj 切面spring容器工作原理详解](https://blog.csdn.net/woyixinyiyi/article/details/85139276)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值