SpringBoot下的代理注解

@EnableAspectJAutoProxy

java 复制代码
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(AspectJAutoProxyRegistrar.class)
public @interface EnableAspectJAutoProxy {
	
    // 是否代理目标对象,ture:使用CGLIB代理 fasle:使用JDK代理
	boolean proxyTargetClass() default false;
	
    // 是否暴露代理对象
	boolean exposeProxy() default false;

}

@EnableAspectJAutoProxy 是一个Spring框架的注解,用于启用基于AspectJ的代理支持。它允许您使用面向切面编程 (AOP) 来实现横切关注点,例如日志记录、性能监控、事务管理等。

具体来说,@EnableAspectJAutoProxy 做了以下几件事情:

1、启用代理机制:它启用了Spring容器的代理功能,允许Spring创建代理对象,以拦截和处理方法调用,正常来说是不需要主动去加该注解,因为由于SpringBoot的自动配置会将代理机制自动开启,具体实现可参考本文最后推荐博文。

2、使用AspectJ注解:它启用了AspectJ注解,使您可以在Spring中使用 @Aspect@Before@After@Around 等注解来定义切面。

3、配置代理模式:它允许您选择代理的模式,通常是 proxyTargetClassexposeProxy 选项。proxyTargetClass 默认为 false,表示使用标准的JDK动态代理,如果将其设置为 true,则使用CGLIB代理。exposeProxy 默认为 false,表示不将当前代理对象暴露给切面,如果将其设置为 true,可以通过 AopContext.currentProxy() 获取当前代理对象。

以下是一个示例:

java 复制代码
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
public class AppConfig {
    // Other bean configurations can go here
}

典型应用

1、解决由于代理实现的机制的失效问题:

比如@Transactional事务、@Async异步,Service内部方法自调用导致的失效

java 复制代码
// 配置暴露代理类,通过获取代理类调取方法
((TUserService) AopContext.currentProxy()).updateRealNameById(id, realName);

参考文章:【精选】Spring源码深度解析:十四、@Aspect方式的AOP上篇 - @EnableAspectJAutoProxy_enableaspectjautoproxy 是哪个包_代码的知行者的博客-CSDN博客

相关推荐
爱吃山竹的大肚肚16 小时前
RocketMQ 4.x + Spring Boot 生产级集成方案(完整笔记)
spring boot·rocketmq·java-rocketmq
意疏16 小时前
openJiuwen实战:用AsyncCallbackFramework为Agent增强器添加可观测性
java·服务器·前端
马士兵教育16 小时前
2026年IT行业基本预测!计算机专业学生就业编程语言Java/C/C++/Python该如何选择?
java·开发语言·c++·人工智能·python·面试·职场和发展
Book思议-16 小时前
顺序表和链表核心差异与优缺点详解
java·数据结构·链表
毕设源码_严学姐16 小时前
计算机毕业设计springboot心理健康辅导系统 高校学生心灵关怀服务平台的设计与实现 校园智慧心理服务系统的设计与实现
spring boot·后端·课程设计
小杨的博客17 小时前
Java + Selenium实现浏览器打印功能
java·selenium
wefly201717 小时前
M3U8 播放调试天花板!m3u8live.cn纯网页无广告,音视频开发效率直接拉满
java·前端·javascript·python·音视频
兆子龙17 小时前
antd 组件也做了同款效果!深入源码看设计模式在前端组件库的应用
java·前端·架构
祁梦17 小时前
Redis从入门到入土 --- 黑马点评判断秒杀资格
java·后端
兆子龙17 小时前
lodash 到 lodash-es 多的不仅仅是后缀!深入源码看 ES Module 带来的性能与体积优化
java·前端·架构