`

如何使用spring的注解驱动aspectj模式

    博客分类:
  • java
阅读更多

在使用spring框架的时候,经常会使用到这个tx:annotation-driven来配置自己项目的事务控制,平常我们大部分的时候用的都是默认的模式(不写或者mode="proxy"),proxy是代理模式,仅有外部方法调用才会被代理截获,自身方法调用,即使配置了@Transactional注解,事务也无法生效,也不能应用在非public方法上;而aspectj模式与代理模式不同,aspectj模式可以自身方法调用,也可以应用在非public上。下面来介绍如何使用mode="aspectj"模式

方法/步骤

首先在spring的配置文件中添加<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj"/>mode设置为aspectj模式

 

jvm参数里添加-javaagent:~aspectjweaver-1.8.1.jar

 

如果是tomcat下,也可以添加到catalina.sh中,set JAVA_OPTS中

-javaagent参数添加完成时候,启动服务就可以正常使用aspectj模式了上面说的方法是类加载器织入(Load Time Weaving,LTW),下面再介绍另外一种方法,编译时织入

在pom.xml文件中加入aspectj-maven-plugin插件配置<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <version>1.9</version> <configuration> <showWeaveInfo>true</showWeaveInfo> <aspectLibraries> <aspectLibrary> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </aspectLibrary> </aspectLibraries> <source>${java.version}</source> <target>${java.version}</target> <complianceLevel>${java.version}</complianceLevel> </configuration> <executions> <execution> <goals> <goal>compile</goal> <goal>test-compile</goal> </goals> </execution> </executions></plugin>

 

这几个配置要加上<source>${java.version}</source><target>${java.version}</target><complianceLevel>${java.version}</complianceLevel>否则可能会报以下错误[ERROR] Syntax error, annotations are only available if source level is 1.5 or greater E:\work\datai\code_study\study-master\study-spring-transaction\src\main\java\cn\sw\study\web\controller\UserController.java:12@Controller^^^^^^^^^^[ERROR] Syntax error, annotations are only available if source level is 1.5 or greater E:\work\datai\code_study\study-master\study-spring-transaction\src\main\java\cn\sw\study\web\controller\UserController.java:13@RequestMapping("/user")[ERROR] Missing message: configure.incompatibleComplianceForSource in: org.aspectj.ajdt.ajc.messages <unknown source file>:<no line information>[ERROR] no sources specified <unknown source file>:<no line information>

添加完成之后,maven进行编译,如果出现java:0::0 can't determine annotations of missing type javax.persistence.Entity错误,

 

则需要添加persistence-api依赖<dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> <scope>provided</scope></dependency>

 

编译完成没有错误之后,这个时候不用加-javaagent,再次启动项目,一样可以完成事务织入

注意事项

aspectj有三个时期可以织入,编译器、后编译器、类加载器,有兴趣的可以都试下

分享到:
评论

相关推荐

    spring aspectj.jar

    另一种是通过Spring的注解驱动的AOP,它利用AspectJ的编译器或 weaving工具来生成代理类,但可以在不引入额外的依赖下运行。`aspectweave`标签通常与AspectJ的织入过程相关,它可以控制何时以及如何进行织入。 在...

    Spring 使用AspectJ 实现 AOP(基于xml文件、基于注解)

    4. **启用注解驱动的AOP**: 在Spring配置中,使用`@EnableAspectJAutoProxy`注解开启对AspectJ注解的支持。 例如: ```java @Aspect @Component public class MyAspect { @Before("execution(* ...

    Spring AOP @AspectJ 入门实例

    @AspectJ是Spring AOP的一个扩展,它提供了一种更接近传统编程的注解驱动的方式来定义切面。接下来,我们详细讲解如何使用@AspectJ进行切面定义: 1. **创建切面类**:首先,你需要创建一个Java类,并使用`@Aspect`...

    spring注解驱动

    以上只是Spring注解驱动的一部分内容,实际使用中还有许多其他的注解,如`@Cacheable`用于缓存,`@Async`用于异步调用等。通过这些注解,Spring提供了强大的功能,使得开发者能更加专注于业务逻辑,而不是繁琐的配置...

    aspectj的jar spring使用aop需要的jar

    9. **注解驱动(Annotation-Based)**:AspectJ支持使用注解来声明切面、切入点和通知,使得代码更清晰,也更容易理解和维护。 10. **配置方式**:在Spring中,可以通过XML配置或使用Java配置类来启用AspectJ支持,...

    Spring的AOP依赖包-AspectJ

    当启用AspectJ注解驱动的AOP(`@EnableAspectJAutoProxy`),Spring会自动创建代理对象来处理通知。此外,还可以通过`@AspectJSupport`和`&lt;aop:aspectj-autoproxy&gt;`元素来启用XML配置方式。 在实际应用中,AspectJ...

    spring注解aop demo

    **二、Spring注解AOP的使用** 在Spring中,我们可以使用注解来声明切面、定义切点以及通知。主要的注解包括: 1. **@Aspect**: 标记一个类作为切面,通常包含切点表达式和通知方法。 2. **@Before**: 前置通知,...

    使用Spring的注解方式实现AOP

    此外,我们还需要在Spring配置中启用注解驱动的AOP支持,通常在`@Configuration`类中添加`@EnableAspectJAutoProxy`注解即可: ```java import org.springframework.context.annotation.Configuration; import org....

    征服Spring AOP—— @AspectJ

    @AspectJ是Spring AOP的一种注解驱动方式,它极大地简化了AOP的使用。本篇文章将深入探讨@AspectJ的使用方法和背后的原理。 首先,我们需要理解面向切面编程(AOP)的基本概念。AOP是一种编程范式,它允许开发者将...

    Spring注解方式实现AOP demo

    为了使AOP生效,还需要在Spring配置中启用注解驱动的AOP并注册切面。在`src/main/resources`目录下的`applicationContext.xml`或使用Java配置类中,你会看到类似以下的配置: ```xml &lt;aop:aspectj-autoproxy /&gt; ``...

    Spring的AOP实例(XML+@AspectJ双版本解析+源码+类库)

    3. @AspectJ注解驱动的AOP @AspectJ是一种更现代、更直观的方式来定义切面,它使用Java注解来声明切面、切入点和通知。例如,我们可以创建一个名为`LoggingAspect`的类,使用`@Aspect`注解标识它为切面,然后使用`@...

    Spring注解Aop简单使用

    在本文中,我们将深入探讨如何在Spring框架中使用注解驱动的Aspect Oriented Programming(AOP),以便实现灵活且模块化的代码结构。AOP是一种编程范式,它允许我们在不改变原有业务逻辑的情况下,对程序进行横向切...

    spring_tx_aspectj方式源码

    1. **启用注解驱动**:在Spring主配置文件中,添加`&lt;context:component-scan&gt;`标签扫描带有注解的类,并启用`&lt;tx:annotation-driven&gt;`标签来激活基于注解的事务管理。 2. **事务注解**:在需要事务管理的方法上使用...

    Spring注解开发组件扫描器.zip

    总结来说,“Spring注解开发组件扫描器”这个主题涵盖了Spring框架中注解驱动开发的关键方面,包括使用注解标记组件、启用组件扫描以及如何通过自定义过滤器来控制扫描过程。了解并掌握这些知识点对于开发高效、灵活...

    spring aop 注解例子

    要启用注解驱动的 AOP,需要在 Spring 配置文件中添加 `&lt;aop:aspectj-autoproxy&gt;` 标签,或者在 Java 配置类中使用 `@EnableAspectJAutoProxy` 注解。 6. **运行环境** 由于这是一个简单的例子,因此运行环境的...

    Spring基于注解实现AOP

    总的来说,Spring的注解驱动AOP使得开发者能够更专注于业务逻辑,而将横切关注点如日志、事务等抽象出来,提高了代码的可读性和可维护性。通过灵活地定义切点和通知,我们可以创建复用性强、结构清晰的模块,这也是...

    Spring学习笔记(15)----使用Spring的注解方式实现AOP

    配置方面,Spring 需要启用对注解驱动的AOP的支持。在Spring的配置文件中,我们需要添加以下配置: ```xml &lt;aop:aspectj-autoproxy /&gt; ``` 这行配置告诉Spring使用AspectJ的自动代理,从而识别和处理带有`@Aspect`...

    用注解的方式进行SpringAOP开发

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理)...理解并熟练掌握注解驱动的Spring AOP,对提升应用程序的可维护性和可扩展性具有重要意义。

    aspectj.pdf

    Spring AOP使用AspectJ的切入点表达式语法,但不支持AspectJ的所有特性,如注解驱动的AOP、前置通知的参数传递等。通过Spring AOP,开发者可以方便地在Spring Bean之间实现AOP的切面逻辑,提高代码的可维护性和扩展...

    Spring AOP面向切面三种实现

    Spring AOP提供了三种实现方式:代理模式、AspectJ切面和注解驱动的切面。 1. **代理模式** Spring AOP的基础是动态代理,它可以创建目标对象的代理对象来实现切面功能。有两种代理方式:JDK动态代理和CGLIB代理。...

Global site tag (gtag.js) - Google Analytics