近日由于要对业务逻辑层的返回值进行一下处理,所以看看了spring 2.0中关于AOP开发部分的内容,在这里做个笔记,以免过几天又给忘了。如果能对您有帮助,就帮忙顶一下。
一、AOP的基本概念
- Aspect(切面),一个横切多个对象的关注点的模块;
- Joint point(连接点),程序执行中的一个点,比如执行一个方法或者是处理一个异常;
- Advice(建议??),一个aspect在一个特殊的Join point的行为或动作。包括:before, after returning, after throwing, after(finally), around五种;
- Pointcut(切入点),匹配连接点一个断言。advice与Pointcut表达式相关联,并且在任何join point与pointcut相匹配时执行。
二、AOP with spring
spring 2.0引入了一个简单并且功能更加强大的方法来自定义aspect。自定义aspect时有两种风格:schema-based和@aspectJ。
- @aspectJ风格指在一个正常的java类上添加java 5的注解来声明一个aspect,它是由AspectJ项目提出的,详细信息请查看http://www.eclipse.org/aspectj,这里不讨论这种方式。
- shcema-based风格是指在spring bean的配置文件中通过新的"aop"命名空间标记定义一个aspect。
aop命名空间定义
- <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-2.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
三、schema-based
定义aspect
- <aop:config>
- <aop:aspect id="myAspect" ref="aBean">
- ...
- aop:aspect>
- >
- <bean id="aBean" class="...">
- ...
- >
定义pointcut
- <aop:config>
- <aop:pointcut id="businessService"
- expression="execution(* com.xyz.myapp.service.*.*(..))"/>
- >
定义Advice
- <aop:aspect id="beforeExample" ref="aBean">
- <aop:before pointcut-ref="dataAccessOperation" method="doAccessCheck"/>
- <aop:after-returning pointcut-ref="dataAccessOperation"returning="retVal" method="doAccessCheck"/>
- <aop:after-throwing pointcut-ref="dataAccessOperation" throwing="dataAccessEx" method="doRecoveryActions"/>
- <aop:after pointcut-ref="dataAccessOperation" method="doReleaseLock"/>
- <aop:around pointcut-ref="businessService" method="doBasicProfiling"/>
- ...
- >
四、例子
配置
- <aop:config>
- <aop:pointcut id="pointcut_lazyProcess"
- expression="this(com.xucons.arch.BusinessLogic) and execution(public !void *(..))"/>
-
- <aop:aspect id="aspect_lazyProcess" ref="lazyProcess">
- <aop:around
- pointcut-ref="pointcut_lazyProcess"
- method="processUninitializedObject"/>
- aop:aspect>
- >
-
- <bean id="lazyProcess" class="com.qusiness.arch.rt.LazyProcess" />
实现
- public class LazyProcess {
- static Logger logger = Logger.getLogger(LazyProcess.class.getName());
-
- public Object processninitializedObject(ProceedingJoinPoint pjp) throws Throwable {
- Object retVal = pjp.proceed(); if (retVal != null) {
- logger.info(">>processing uninitialized business object...");
- if (retVal instanceof Date ) {
- retVal = new Date(((Date) retVal).getTime());
- } else {
- process(retVal);
- }
- }
- return retVal;
- }
- }
分享到:
相关推荐
### AspectJ in Action: Enterprise AOP with Spring Applications #### 关键知识点概述 1. **Spring-AspectJ集成:**本书重点介绍了Spring框架与AspectJ相结合的技术优势及其在企业级应用中的强大功能。 2. **...
### 关于《AspectJ in Action: Enterprise AOP with Spring Applications(第2版)》的关键知识点解析 #### 一、AspectJ简介与AOP概念 **AspectJ**是面向切面编程(Aspect-Oriented Programming, AOP)的一种成熟...
### 企业级面向切面编程(AOP)与Spring框架 #### 一、Spring框架概述 **Spring框架**是一款开放源代码的企业级Java应用框架,它最初基于Rod Johnson的著作《J2EE设计与开发》(Wiley, 2002年),并且通过Rod ...
在Spring AOP的例子中,我们可能会创建一个`@RunWith(SpringJUnit4ClassRunner.class)`标记的测试类,以利用Spring的测试支持。在测试方法中,可以注入需要的bean,然后调用方法来触发AOP代理。这样,通知将在适当的...
5. **测试类**:`SpringAopTest`可能是测试类,使用`@RunWith(SpringRunner.class)`和`@SpringBootTest`来启动Spring应用上下文,并进行断言验证AOP是否按预期工作。 通过这个练习,你可以掌握如何在实际项目中使用...
SpringAOP Spring AOP(面向方面的编程)用于模块化“横截面”服务。 用一种简单的方式,我们可以说它是一个旨在拦截某些进程的组件,例如,在执行某个方法时,Spring AOP可以审核该执行方法,并在该方法执行...
在Java 7中,虽然没有引入与AOP直接相关的重大更新,但Spring AOP框架可以充分利用Java 7的一些特性,如try-with-resources语句,提高代码的简洁性和可维护性。 aspectj-1.7.4.jar是AspectJ库的一部分,AspectJ是一...
在Spring AOP(面向切面编程)中,我们经常利用它来实现横切关注点,如日志记录、事务管理等。"springaop拦截controller日志"这个主题旨在讲解如何使用Spring AOP来拦截Controller层的方法调用,并在方法执行前后...
- 创建一个Spring测试类,使用`@RunWith(SpringRunner.class)`和`@SpringBootTest`注解来启动Spring容器,并在测试方法中调用需要被拦截的方法。 - 运行测试,查看日志输出,确认日志功能按预期工作。 通过以上...
文件"Professional Java Development with the Spring Framework.chm"很可能是这本书的电子版,里面详细涵盖了Spring框架的各个方面,包括但不限于:Spring核心、Spring MVC、Spring AOP、Spring JDBC、Spring Data...
这个实例中的压缩包可能包含了配置文件、源代码和测试案例,你可以通过解压`demo-caching-with-spring-aop-master`来查看完整的实现,学习如何配置Spring AOP,以及如何定义和使用自定义缓存注解。 总的来说,...
本实例将探讨Spring 2.0版本中如何利用AOP(面向切面编程)来实现横切关注点的解耦。AOP是Spring框架的一个重要特性,它允许我们编写与业务逻辑无关的代码,如日志、事务管理、性能监控等,并在适当的时候自动插入到...
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。 首先,我们需要了解AOP的基本...
标题 "Spring AOP.rar" 涉及到的是Spring框架中的一个重要特性——面向切面编程(Aspect Oriented Programming,简称AOP)。AOP是Spring框架提供的一种强大的功能,它允许我们在不修改源代码的情况下,对应用程序...
总之,"Better J2EEing with Spring"这篇文章深入浅出地介绍了Spring框架如何通过IoC和AOP等机制缓解J2EE开发的复杂性,提供了一种更优雅、更易于维护的解决方案。Spring的出现不仅是对J2EE复杂性的回应,也为现代...
这个名为"spring-framework-1.0-with-dependencies.zip"的压缩包包含了Spring Framework 1.0版本及其相关的依赖库,是初学者和开发者了解早期Spring框架的重要资源。 在Spring 1.0版本中,核心概念主要围绕IoC...