`
jsczxy2
  • 浏览: 1275019 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

Spring3.0中的AOP配置方法

阅读更多

 

第一种配置方法:使用@AspectJ标签

  1. 在配置文件中添加<aop:aspectj-autoproxy/>注解
  2. 创建一个Java文件,使用@Aspect注解修饰该类
  3. 创建一个方法,使用@Before、@After、@Around等进行修饰,在注解中写上切入点的表达式

说明:上述Java文件创建好后,需要将其在Spring的容器中进行声明,可以在配置文件中定义<bean/>节点,也可以使用@Component组件进行修饰

示例:

Java代码   收藏代码
  1. import org.aspectj.lang.ProceedingJoinPoint;  
  2. import org.aspectj.lang.annotation.After;  
  3. import org.aspectj.lang.annotation.AfterThrowing;  
  4. import org.aspectj.lang.annotation.Around;  
  5. import org.aspectj.lang.annotation.Aspect;  
  6. import org.aspectj.lang.annotation.Before;  
  7. import org.springframework.stereotype.Component;  
  8.   
  9. /** 
  10.  * 基于注解的AOP日志示例 
  11.  * 
  12.  */  
  13. @Component  
  14. @Aspect  
  15. public class AopLog {  
  16.       
  17.     //方法执行前调用  
  18.     @Before("execution (* com.services.impl.*.*(..))")  
  19.     public void before() {  
  20.         System.out.println("before");  
  21.     }  
  22.       
  23.     //方法执行后调用  
  24.     @After("execution (* com.services.impl.*.*(..))")  
  25.     public void after() {  
  26.         System.out.println("after");  
  27.     }  
  28.       
  29.     //方法执行的前后调用  
  30.     @Around("execution (* com.services.impl.*.*(..))")  
  31.     public Object around(ProceedingJoinPoint point) throws Throwable{  
  32.         System.out.println("begin around");  
  33.         Object object = point.proceed();  
  34.         System.out.println("end around");  
  35.         return object;  
  36.     }  
  37.       
  38.     //方法运行出现异常时调用  
  39.     @AfterThrowing(pointcut = "execution (* com.services.impl.*.*(..))",throwing = "ex")  
  40.     public void afterThrowing(Exception ex){  
  41.         System.out.println("afterThrowing");  
  42.         System.out.println(ex);  
  43.     }  
  44. }  

上面这段代码中多次使用了重复的切入点,这种情况下,可以使用@Pointcut标注,来修改一个切入点方法(这个方法不需要参数和方法体),然后就可以在@Before等标注中引用该方法作为切入点,示例如下:

Java代码   收藏代码
  1. import org.aspectj.lang.ProceedingJoinPoint;  
  2. import org.aspectj.lang.annotation.Around;  
  3. import org.aspectj.lang.annotation.Aspect;  
  4. import org.aspectj.lang.annotation.Before;  
  5. import org.aspectj.lang.annotation.Pointcut;  
  6. import org.springframework.stereotype.Component;  
  7.   
  8. /** 
  9.  * 基于注解的AOP日志示例 
  10.  * 
  11.  */  
  12. @Component  
  13. @Aspect  
  14. public class AopLog {  
  15.       
  16.     @Pointcut("execution (* com.services.impl.*.*(..))")  
  17.     public void pointcut(){}  
  18.       
  19.     //方法执行前调用  
  20.     @Before("pointcut()")  
  21.     public void before() {  
  22.         System.out.println("before");  
  23.     }  
  24.       
  25.     //方法执行的前后调用  
  26.     @Around("pointcut()")  
  27.     public Object around(ProceedingJoinPoint point) throws Throwable{  
  28.         System.out.println("begin around");  
  29.         Object object = point.proceed();  
  30.         System.out.println("end around");  
  31.         return object;  
  32.     }  
  33. }  

 

 

 

 

 

第二种配置方法:基于配置文件的配置

  1. 创建一个Java文件,并指定一个用于执行拦截的方法,该方法可以有0个或多个参数
  2. 在Spring配置文件中注册该Java类为一个Bean
  3. 使用<aop:config/>、<aop:aspect/>等标签进行配置

示例:

Java文件

Java代码   收藏代码
  1. import org.aspectj.lang.ProceedingJoinPoint;  
  2.   
  3. /** 
  4.  * 基于配置文件的AOP日志示例 
  5.  *  
  6.  */  
  7. public class AopLog {  
  8.       
  9.     //方法执行的前后调用  
  10.     public Object runOnAround(ProceedingJoinPoint point) throws Throwable{  
  11.         System.out.println("begin around");  
  12.         Object object = point.proceed();  
  13.         System.out.println("end around");  
  14.         return object;  
  15.     }  
  16.       
  17. }  

 Spring配置文件

Xml代码   收藏代码
  1. <bean id="aopLog" class="com.aop.AopLog"></bean>  
  2.   
  3. <aop:config>  
  4.     <aop:aspect ref="aopLog">  
  5.         <aop:around method="runOnAround" pointcut="execution (* com.services.impl.*.*(..))"/>  
  6.     </aop:aspect>  
  7. </aop:config>  

 注意:上面这个示例使用的是around方式的拦截,该方法要求Java类中的方法有一个ProceedingJoinPoint类型的参数

使用第二种方式的AOP配置,在Eclipse(有SpringIDE插件)中被拦截到的方法中有标识显示

 

以上配置基于Spring 3.0.5 进行设置,参考其《Reference Documentation》

 

最后加一句:spring3的AOP注释支持&&,||,!等符号,很方便,例如:

@Before("execution(* com.web.dwr..*.*(..)) && !execution(* com.web.dwr.BaseDwr.*(..))")

分享到:
评论

相关推荐

    spring 3.0 aop 实例

    4. **配置AOP**:在Spring 3.0中,可以使用XML配置或者注解方式来声明AOP。XML配置通过`&lt;aop:config&gt;`和`&lt;aop:advisor&gt;`等元素定义切入点和通知。注解方式则更加简洁,如`@Aspect`定义切面,`@Pointcut`定义切入点,...

    spring3.0 全部jar包

    在下载的"spring3.0 全部jar包"中,"dist"文件夹可能包含了所有Spring 3.0框架运行所需的库文件,包括核心容器、AOP、ORM、Web、Test等多个模块的jar包。这些jar文件是构建和运行Spring 3.0应用的基础,它们包含了...

    spring3.0jar包

    Spring 3.0 是一个里程碑式的版本,在Java企业级应用开发领域中占据着核心地位。这个版本的发布引入了许多新特性、改进和优化,旨在提升开发者的工作效率和应用程序的可维护性。Spring 框架以其强大的依赖注入...

    Spring3.0中文帮助文档

    以上只是Spring 3.0中部分关键特性和功能的概述,实际的中文帮助文档会详细解释这些概念,提供使用示例,并指导开发者如何在项目中有效地应用Spring框架。通过深入学习和实践,开发者能够充分利用Spring 3.0的优势,...

    Spring3.0AOP所需jar包

    标题"Spring3.0AOP所需jar包"指的是为了在Spring 3.0及以上版本中使用AOP功能,我们需要额外添加一些jar包到项目中。这些jar包通常包括Spring AOP模块本身以及其依赖的相关库。Spring框架的每个主要模块都有对应的...

    spring3.0 jar包

    在Spring 3.0中,注解的应用更加广泛,如@Controller、@Service、@Repository和@Transactional等,极大地简化了XML配置,提高了开发效率。开发者可以通过注解直接在类或方法上声明其在应用程序中的角色和行为。 3....

    spring3.0完整框架

    这个压缩包中的"spring3.0"文件很可能包含了所有需要的Spring 3.0框架相关的jar包,包括核心库、AOP、Web、MVC等模块的jar,是搭建Spring 3.0环境所必需的。开发者可以通过这些jar包快速构建基于Spring 3.0的应用,...

    spring 3.0 jar 包

    7. **SpEL(Spring Expression Language)**:Spring 3.0引入的表达式语言,用于在运行时查询和操作对象图,如在AOP中动态设置切入点表达式。 8. **RESTful支持**:Spring 3.0增强了对RESTful Web服务的支持,可以...

    spring3.0轻量级框架

    在Spring 3.0中,对依赖注入(Dependency Injection, DI)进行了优化,支持了基于注解的配置,开发者可以使用@Component、@Service、@Repository和@Controller等注解来声明bean,并通过@Autowired自动装配依赖。...

    spring3.0的API

    1. **Bean表达式语言(Bean Expression Language, BEML)**:Spring 3.0引入了基于Groovy的表达式语言,允许在配置中进行更复杂的逻辑判断和属性设置。 2. **泛型注解支持**:Spring 3.0开始支持泛型类型的注解,使...

    Spring3.0中文版

    4. **AOP增强**:在Spring3.0中,AOP的使用更加方便,可以通过注解定义切面,减少了编写代理代码的工作。同时,增强了切点表达式(Pointcut Expression)的功能。 5. **SpringMVC**:作为Spring框架的Web层解决方案...

    spring 3.0 jar包

    Spring 3.0是Spring框架的一个重要版本,它在2009年发布,为Java开发者带来了许多新特性和改进。...在使用前,请确保你的环境满足Spring 3.0的系统需求,并参考Spring官方文档来了解如何配置和使用这些jar文件。

    Spring 3.0就这么简单.pdf

    在Spring 3.0中,DI可以通过XML配置、注解或Java配置三种方式进行。 2. **AOP(Aspect Oriented Programming, 面向切面编程)**:Spring 3.0对AOP进行了优化,支持更多样化的切面定义,包括基于注解的切面,使得...

    spring3.0发行版

    面向切面编程(AOP)在Spring 3.0中也得到了强化。新增的@Aspect注解使得定义切面更加直观,而@AfterReturning、@AfterThrowing等注解则方便了后置通知的编写。此外,Spring 3.0还支持了基于注解的切点表达式,让...

    Spring3.0Jar包

    3. **注解驱动开发**:Spring 3.0 大量引入了注解,如 `@Autowired`、`@Service`、`@Repository` 和 `@Controller`,这些注解简化了配置文件,使得基于 XML 的配置可以被注解替代,降低了配置复杂性。 4. **Spring ...

    Spring3.0 chmAPI 和 Spring3.0所有jar 和 Spring3.0源码

    本资源包含Spring3.0的API文档(chm格式)、所有必要的jar包以及源码,非常适合开发者在学习和开发过程中参考。 **Spring3.0 API文档** API文档(chm格式)提供了关于Spring3.0框架的详细说明,包括各个模块的功能...

    spring3.0 源码

    在Spring 3.0中,IoC容器通过XML、注解以及Java配置三种方式来定义bean。注解配置的增强使得代码更加简洁,降低了XML配置的复杂性。`@Component`、`@Service`、`@Repository`和`@Controller`等注解用于标记组件,而`...

    spring3.0jar包集合

    在Spring 3.0中,批注(Annotation)被更广泛地用于配置,替代了XML配置文件。例如,`@Autowired`用于自动装配依赖,`@Service`、`@Repository`和`@Controller`用于组件的标记,`@Transactional`用于标记事务边界。...

    Spring3.0+myBatis3.0

    《Spring3.0与myBatis3.0整合详解》 在现代Java开发中,Spring框架因其强大的依赖注入和面向切面编程能力,已经成为企业级应用的首选。而myBatis作为一款轻量级的持久层框架,以其灵活的SQL映射和简单的对象关系...

Global site tag (gtag.js) - Google Analytics