`
xucons
  • 浏览: 86636 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AOP with spring

阅读更多

        近日由于要对业务逻辑层的返回值进行一下处理,所以看看了spring 2.0中关于AOP开发部分的内容,在这里做个笔记,以免过几天又给忘了。如果能对您有帮助,就帮忙顶一下。

一、AOP的基本概念

  1. Aspect(切面),一个横切多个对象的关注点的模块;
  2. Joint point(连接点),程序执行中的一个点,比如执行一个方法或者是处理一个异常;
  3. Advice(建议??),一个aspect在一个特殊的Join point的行为或动作。包括:before, after returning, after throwing, after(finally), around五种;
  4. Pointcut(切入点),匹配连接点一个断言。advice与Pointcut表达式相关联,并且在任何join point与pointcut相匹配时执行。

二、AOP with spring
          spring 2.0引入了一个简单并且功能更加强大的方法来自定义aspect。自定义aspect时有两种风格:schema-based和@aspectJ。

  1. @aspectJ风格指在一个正常的java类上添加java 5的注解来声明一个aspect,它是由AspectJ项目提出的,详细信息请查看http://www.eclipse.org/aspectj,这里不讨论这种方式。
  2. shcema-based风格是指在spring bean的配置文件中通过新的"aop"命名空间标记定义一个aspect。
aop命名空间定义
  1. <beans xmlns="http://www.springframework.org/schema/beans"      
  2.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      
  3.        xmlns:aop="http://www.springframework.org/schema/aop"      
  4.        xsi:schemaLocation="       
  5.         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd       
  6.         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">  

三、schema-based

定义aspect

 

  1. <aop:config>  
  2.   <aop:aspect id="myAspect" ref="aBean">  
  3.   ...   
  4.    aop:aspect>  
  5. >  
  6. <bean id="aBean" class="...">  
  7. ...   
  8. >  

 

 

定义pointcut
  1. <aop:config>  
  2.    <aop:pointcut id="businessService"  
  3. expression="execution(* com.xyz.myapp.service.*.*(..))"/>  
  4. >  

 

定义Advice

 

  1. <aop:aspect id="beforeExample" ref="aBean">  
  2.    <aop:before pointcut-ref="dataAccessOperation" method="doAccessCheck"/>  
  3.   <aop:after-returning pointcut-ref="dataAccessOperation"returning="retVal" method="doAccessCheck"/>  
  4.   <aop:after-throwing pointcut-ref="dataAccessOperation" throwing="dataAccessEx" method="doRecoveryActions"/>  
  5.   <aop:after pointcut-ref="dataAccessOperation" method="doReleaseLock"/>  
  6.   <aop:around pointcut-ref="businessService" method="doBasicProfiling"/>  
  7. ...   
  8. >  

 

四、例子

配置
  1. <aop:config>  
  2.     <aop:pointcut id="pointcut_lazyProcess"    
  3.         expression="this(com.xucons.arch.BusinessLogic) and execution(public !void *(..))"/>  
  4.   
  5.     <aop:aspect id="aspect_lazyProcess" ref="lazyProcess">  
  6.         <aop:around  
  7.             pointcut-ref="pointcut_lazyProcess"  
  8.             method="processUninitializedObject"/>          
  9.     aop:aspect>  
  10. >  
  11.   
  12. <bean id="lazyProcess" class="com.qusiness.arch.rt.LazyProcess" />  

      

实现
  1. public class LazyProcess {   
  2.     static Logger logger = Logger.getLogger(LazyProcess.class.getName());   
  3.        
  4.     public Object processninitializedObject(ProceedingJoinPoint pjp) throws Throwable {   
  5.         Object retVal = pjp.proceed();           if (retVal != null) {   
  6.             logger.info(">>processing uninitialized business object...");   
  7.             if (retVal instanceof Date ) {   
  8.                 retVal = new Date(((Date) retVal).getTime());   
  9.             } else {   
  10.                 process(retVal);   
  11.             }   
  12.         }          
  13.         return retVal;   
  14.     }   
  15. }  

 

  
分享到:
评论

相关推荐

    AspectJ in Action: Enterprise AOP with Spring Applications

    ### AspectJ in Action: Enterprise AOP with Spring Applications #### 关键知识点概述 1. **Spring-AspectJ集成:**本书重点介绍了Spring框架与AspectJ相结合的技术优势及其在企业级应用中的强大功能。 2. **...

    Aspectj in Action: Enterprise AOP with Spring Applications (2nd Edition)

    ### 关于《AspectJ in Action: Enterprise AOP with Spring Applications(第2版)》的关键知识点解析 #### 一、AspectJ简介与AOP概念 **AspectJ**是面向切面编程(Aspect-Oriented Programming, AOP)的一种成熟...

    Enterprise AOP With the Spring Framework.pdf

    ### 企业级面向切面编程(AOP)与Spring框架 #### 一、Spring框架概述 **Spring框架**是一款开放源代码的企业级Java应用框架,它最初基于Rod Johnson的著作《J2EE设计与开发》(Wiley, 2002年),并且通过Rod ...

    Spring AOP完整例子

    在Spring AOP的例子中,我们可能会创建一个`@RunWith(SpringJUnit4ClassRunner.class)`标记的测试类,以利用Spring的测试支持。在测试方法中,可以注入需要的bean,然后调用方法来触发AOP代理。这样,通知将在适当的...

    spring aop练习

    5. **测试类**:`SpringAopTest`可能是测试类,使用`@RunWith(SpringRunner.class)`和`@SpringBootTest`来启动Spring应用上下文,并进行断言验证AOP是否按预期工作。 通过这个练习,你可以掌握如何在实际项目中使用...

    SpringAOP:Spring AOP示例

    SpringAOP Spring AOP(面向方面​​的编程)用于模块化“横截面”服务。 用一种简单的方式,我们可以说它是一个旨在拦截某些进程的组件,例如,在执行某个方法时,Spring AOP可以审核该执行方法,并在该方法执行...

    spring aop支持jdk1.7的jar

    在Java 7中,虽然没有引入与AOP直接相关的重大更新,但Spring AOP框架可以充分利用Java 7的一些特性,如try-with-resources语句,提高代码的简洁性和可维护性。 aspectj-1.7.4.jar是AspectJ库的一部分,AspectJ是一...

    springaop拦截controller日志

    在Spring AOP(面向切面编程)中,我们经常利用它来实现横切关注点,如日志记录、事务管理等。"springaop拦截controller日志"这个主题旨在讲解如何使用Spring AOP来拦截Controller层的方法调用,并在方法执行前后...

    spring aop实现日志功能

    - 创建一个Spring测试类,使用`@RunWith(SpringRunner.class)`和`@SpringBootTest`注解来启动Spring容器,并在测试方法中调用需要被拦截的方法。 - 运行测试,查看日志输出,确认日志功能按预期工作。 通过以上...

    Professional Java Development with the Spring Framework.rar

    文件"Professional Java Development with the Spring Framework.chm"很可能是这本书的电子版,里面详细涵盖了Spring框架的各个方面,包括但不限于:Spring核心、Spring MVC、Spring AOP、Spring JDBC、Spring Data...

    spring aop 自定义缓存实现

    这个实例中的压缩包可能包含了配置文件、源代码和测试案例,你可以通过解压`demo-caching-with-spring-aop-master`来查看完整的实现,学习如何配置Spring AOP,以及如何定义和使用自定义缓存注解。 总的来说,...

    spring 2.0使用AOP实例(基于XML的配置方式)

    本实例将探讨Spring 2.0版本中如何利用AOP(面向切面编程)来实现横切关注点的解耦。AOP是Spring框架的一个重要特性,它允许我们编写与业务逻辑无关的代码,如日志、事务管理、性能监控等,并在适当的时候自动插入到...

    springAOP demo 带错误解决文档

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.config.internalAutoProxyCreator': Instantiation of bean failed; nested exception is org....

    使用Spring的注解方式实现AOP

    Spring的面向切面编程(AOP)特性允许我们分离关注点,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。本篇文章将深入探讨如何通过注解方式在Spring中实现AOP。 首先,我们需要了解AOP的基本...

    Spring aop.rar

    标题 "Spring AOP.rar" 涉及到的是Spring框架中的一个重要特性——面向切面编程(Aspect Oriented Programming,简称AOP)。AOP是Spring框架提供的一种强大的功能,它允许我们在不修改源代码的情况下,对应用程序...

    Better J2EEing with Spring

    总之,"Better J2EEing with Spring"这篇文章深入浅出地介绍了Spring框架如何通过IoC和AOP等机制缓解J2EE开发的复杂性,提供了一种更优雅、更易于维护的解决方案。Spring的出现不仅是对J2EE复杂性的回应,也为现代...

    spring-framework-1.0-with-dependencies.zip

    这个名为"spring-framework-1.0-with-dependencies.zip"的压缩包包含了Spring Framework 1.0版本及其相关的依赖库,是初学者和开发者了解早期Spring框架的重要资源。 在Spring 1.0版本中,核心概念主要围绕IoC...

Global site tag (gtag.js) - Google Analytics