http://blog.csdn.net/xiaose7613/article/details/4301989
1.定义一个被通知的对象(目标对象)POJO
TestBean.java
package com.spring.aspect; public class TestBean { public void add(){ System.out.println("add to db"); } }
2.定义一个通知对象(advisor)
TestAdvice.java
package com.spring.aspect; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; /** * @Description: 定义一个通知对象(advisor) * @Author : yc.min */ @Aspect public class TestAdvice { @Pointcut("execution(* TestBean.add(..))") public void perform(){ } /** * 增加事务到指定的类 */ @Around("perform()") public void addTransaction(ProceedingJoinPoint pjp) { System.out.println("set autocommit false"); try { pjp.proceed(); System.out.println("commit transaction"); } catch (Throwable throwable) { System.out.println("rollback transaction"); } } }
3.配置XML代码
aop.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <aop:aspectj-autoproxy/> <bean id="testBean" class="com.spring.aspect.TestBean"/> <bean id="testAdvice" class="com.spring.aspect.TestAdvice"/> </beans>
4.写测试代码测试
Test.java
package com.spring.aspect; import java.io.IOException; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) throws IOException { ApplicationContext ctx = new ClassPathXmlApplicationContext( "com/spring/aspect/aop.xml"); TestBean t = (TestBean) ctx.getBean("testBean"); t.add(); } }
5.测试结果
- set autocommit false
- add to db
- commit transaction
6,依赖jar包
aspectjweaver-1.6.12.jar
http://minyongcheng.iteye.com/admin/blogs/2104253
相关推荐
4. **织入切面**:Spring会自动检测到`@Transactional`注解,并在需要的地方自动创建事务。如果你使用的是编译时织入,你需要使用AspectJ的maven或gradle插件来编译代码;如果是运行时织入,则不需要额外配置,只需...
其中,类文件可能包含了切面和被通知的对象,配置文件可能包含了Spring和AspectJ的配置,测试用例则用来验证AOP功能是否正常工作。 通过这个实验,你可以深入理解Spring和AspectJ如何协同工作,提升代码的可维护性...
总的来说,Spring @AspectJ为开发者提供了一种简单、直观的方式来实现面向切面编程。通过定义切面和通知,我们可以将关注点分离,提高代码的可维护性和复用性。在实际项目中,这种技术常用于日志、事务管理、性能...
- **提高测试性:**将横切关注点从核心业务逻辑中分离出来后,可以使单元测试更加简单易行。 #### 面向切面编程(AOP)原理与实践 - **AOP基本概念:** - **切面(Aspect):**一个关注点的模块化表示。 - **连接点...
在Spring中结合使用AspectJ,可以实现更灵活的代码结构。例如,我们可以将日志、缓存、事务管理等横切关注点(cross-cutting concerns)抽取为切面,然后在需要的地方应用。这样不仅提高了代码的可复用性,还减少了...
4. **测试**:在测试类中,创建Spring容器并调用`UserService`的方法,你会看到日志信息先于方法执行输出。 以上就是Spring AOP的基本用法。在实际项目中,你可以根据需求定义不同的通知类型,如`@After`、`@Around...
Spring会自动检测这些注解,并使用像AspectJ这样的AOP工具来确保事务的正确性。在分布式系统中,事务管理尤其重要,因为它确保了数据的一致性和完整性。 总的来说,"aspectj-1.6.10.jar" 和 "aspectjweaver-1.6.9....
源代码中,你可能会发现@Test注解的JUnit测试用例,以及Spring TestContext Framework的使用,这些帮助确保代码质量。 7. **Spring Security**:如果源代码涉及安全,那么Spring Security的配置和使用也是重点,它...
总的来说,Spring AOP结合AspectJ注解使得我们能以声明式的方式处理横切关注点,提高代码的可读性和可维护性。通过实践和调试,你将更好地理解这些概念如何协同工作,从而在实际项目中灵活运用。
这个压缩包提供的"spring扩展点测试示例代码"是一个实例,帮助我们理解如何在实践中利用Spring的扩展点进行自定义功能的实现。 首先,Spring的核心设计理念之一就是“依赖注入”(Dependency Injection,DI),它...
在压缩包`SpringAOPDemo1`中,很可能包含了整个Spring AOP的示例代码,包括`UserService`、`LogService`类的实现,以及相应的`applicationContext.xml`配置文件。通过查看和运行这些代码,你可以更深入地理解Spring ...
Spring AOP(面向切面编程)是Spring框架中的一个重要组成部分,它允许程序员在不修改源代码的情况下,通过插入切面来增强程序的功能。这个压缩包文件"Spring AOP代码"很可能包含了一些示例代码,用于演示如何在...
AspectJ、AspectJRT 和 AspectWeaver 是三个与面向切面编程(AOP)相关的关键组件,它们在Spring框架中有着重要应用,...同时,使用AspectJ的动态织入功能可以更好地实现代码的解耦,提高代码的可复用性和可测试性。
10. **Spring AOP增强**: Spring 2.5的AOP增强了对AspectJ的支持,可以使用AspectJ的语法定义切点和通知,提供了更强大的切面编程能力。 这个"传智播客 spring2.5源代码_lib包"包含了Spring 2.5框架中的所有库文件...
8. **测试支持**:Spring提供了强大的测试支持,如`SpringJUnit4ClassRunner`,使单元测试和集成测试变得简单。 通过阅读和分析《Spring攻略(第二版)源代码》中的内容,开发者不仅可以深化对Spring框架的理解,还能...
在"AopDemo-master"压缩包中,通常包含了一个简单的AspectJ示例项目,可能包括以下部分: 1. **源代码**:包含切面类(如LoggingAspect)和业务逻辑类(如Service类)。 2. **配置文件**:如Spring的XML配置文件,...
此外,书中还介绍了如何集成AspectJ到Spring框架,以及如何在测试环境中使用AspectJ。 切面编程(AOP)的核心理念在于,通过将系统中分散的、横切多个模块的公共行为(如事务管理)抽取出来,形成独立的切面,然后...
通过@Autowired注解,系统可以自动装配Bean,简化了配置,增强了代码的可测试性。同时,@Qualifier注解用于在多个相同类型的Bean中指定具体依赖。 3. **Bean生命周期管理** 在4.3版本中,Spring提供了多种方式来...
9. **测试框架增强**:Spring 3.0的测试支持更加完善,包括对Mockito等第三方库的集成,使得单元测试和集成测试变得更加容易。 10. **更多模块**:Spring 3.0.5包含了多个模块的更新,例如`org.springframework....