@Aspect注解无效

Pointcut的execution配置正确的话,检查下,是否加了以下jar包

<!-- http://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.8.9</version>
</dependency>
		<!-- http://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.9</version>
</dependency>
		<!-- http://mvnrepository.com/artifact/cglib/cglib -->
<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>3.2.2</version>
</dependency>


转载于:https://www.cnblogs.com/caohaifeng/p/5550708.html

<think>好的,我现在需要帮助用户查找关于@Aspect注解在Spring AOP中的使用示例。首先,我要回顾用户提供的引用内容,看看有没有相关的示例。根据引用3和引用4,用户已经提到了一些示例代码,特别是引用3中的LoggingAspect类,里面展示了@Aspect、@Component、@Pointcut和@Before的使用。这可能就是用户需要的示例。 接下来,我需要确保回答符合用户的要求。用户希望看到@Aspect注解的使用示例,并且可能需要更多的细节或不同的通知类型。例如,除了@Before,还有@After、@Around等通知类型。因此,我应该扩展示例,包含更多常见的通知类型,让用户全面了解如何应用这些注解。 同时,我需要检查是否有其他引用内容可以补充这个示例。引用4提到了切面的用途,比如日志记录、事务管理等,可能可以再添加一个事务管理的示例,以展示不同的应用场景。不过用户主要询问的是使用示例,所以可能一个详细的日志记录示例加上一个简要的事务管理示例会更合适。 另外,用户提到需要结构清晰的回答,所以应该分步骤说明示例,并解释每个部分的作用。比如,首先定义切面类,然后定义切入点,接着添加不同的通知方法。同时,要确保代码语法正确,符合Spring AOP的规范。 还要注意用户提供的引用中提到的局限性,比如Spring AOP只能拦截通过Spring容器管理的Bean的方法调用,这点也需要在注意事项中提及,避免用户在使用时遇到问题。 最后,生成相关问题时要围绕@Aspect的使用、配置、通知类型、与Spring Boot的集成以及常见错误处理等方面,帮助用户进一步探索相关内容。</think>### @Aspect 注解使用示例(Spring AOP) 以下是基于引用[3][^3]和引用[4][^4]的典型@Aspect注解使用示例,包含日志记录和事务管理两种场景: #### 1. 基础日志切面示例 ```java @Aspect @Component public class LoggingAspect { // 定义切入点:拦截service包下所有类的所有方法 @Pointcut("execution(* com.example.service.*.*(..))") public void serviceMethods() {} // 前置通知:方法执行前记录日志 @Before("serviceMethods()") public void logBefore(JoinPoint joinPoint) { System.out.println("准备执行方法: " + joinPoint.getSignature().getName()); } // 后置通知:方法执行后记录结果 @AfterReturning(pointcut = "serviceMethods()", returning = "result") public void logAfterReturning(JoinPoint joinPoint, Object result) { System.out.println("方法执行完成: " + joinPoint.getSignature().getName() + " 返回结果: " + result); } // 环绕通知:统计方法执行时间 @Around("serviceMethods()") public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { long start = System.currentTimeMillis(); Object result = joinPoint.proceed(); long duration = System.currentTimeMillis() - start; System.out.println("方法执行耗时: " + duration + "ms"); return result; } } ``` #### 2. 事务管理切面示例 ```java @Aspect @Component public class TransactionAspect { @Autowired private PlatformTransactionManager transactionManager; @Pointcut("@annotation(org.springframework.transaction.annotation.Transactional)") public void transactionalMethods() {} @Around("transactionalMethods()") public Object manageTransaction(ProceedingJoinPoint joinPoint) throws Throwable { TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { Object result = joinPoint.proceed(); transactionManager.commit(status); return result; } catch (Exception e) { transactionManager.rollback(status); throw e; } } } ``` ### 关键配置步骤 1. **启用AOP支持**:在Spring Boot启动类添加`@EnableAspectJAutoProxy` 2. **组件扫描**:确保切面类位于组件扫描路径下 3. **切入点表达式**:支持`execution()`、`@annotation()`等匹配方式 ### 注意事项 1. 需通过Spring容器获取Bean才能生效(直接new对象无效)[^3] 2. 避免在同类内部方法调用中使用AOP 3. 性能敏感场景需评估代理开销
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值