基于@Aspect @Component的切面类不生效

开发taotao项目的过程中,尝试统一打印日志,在类上使用 @Component 注解 把切面类加入到IOC容器中 ,使用 @Aspect 注解 使之成为切面类,项目启动调用接口,切面类不生效

但是相同方法实现的统一打印日志类在spring boot的项目中可以正常工作,考虑可能是spring boot已经为我们做了一些工作,研究后发现需要在spring配置文件添加<aop:aspectj-autoproxy />,以此标签声明自动为spring容器中那些配置@aspectJ切面的bean创建代理,织入切面。spring boot项目不用配置是因为spring boot默认设置spring.aop.auto=true,默认开启AOP支持

另外,spring项目中proxy-target-class默认为false,表示使用jdk动态代理织入增强,而springboot项目中默认为true,使用CGLib动态代理技术织入增强

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Java 8 中,你可以使用 `@Transactional` 注解将事务管理应用于切面。`@Transactional` 注解用于将方法标记为事务性方法,以便在方法执行期间启动、提交或回滚事务。 要在切面中使用 `@Transactional` 注解,首先需要确保你的项目中已经添加了相关的依赖。通常,你需要添加 Spring 的事务管理依赖,例如: ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.3.10</version> </dependency> ``` 接下来,你可以在切面的方法上添加 `@Transactional` 注解来启用事务管理。例如: ```java @Aspect @Component public class MyAspect { @Autowired private SomeService someService; @Around("@annotation(org.springframework.transaction.annotation.Transactional)") public Object aroundTransactionalMethod(ProceedingJoinPoint joinPoint) throws Throwable { try { // 在方法执行前启动事务 someService.startTransaction(); // 执行被切入的方法 Object result = joinPoint.proceed(); // 在方法执行后提交事务 someService.commitTransaction(); return result; } catch (Exception e) { // 在发生异常时回滚事务 someService.rollbackTransaction(); throw e; } } } ``` 在上面的示例中,切面 `MyAspect` 使用 `@Around` 注解来定义一个环绕通知,该通知会在标记了 `@Transactional` 注解的方法执行前后进行处理。你可以根据实际需求来自定义切面的逻辑。 请确保在应用程序的配置文件中启用了切面自动代理,以便使切面生效。例如,在 Spring Boot 中,你可以使用 `@EnableAspectJAutoProxy` 注解来启用自动代理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值