Spring面向切面编程(AOP)
2017-05-12 16:50
489 查看
转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/71747299,建议读者阅读原文,确保获得完整的信息
AOP一方面实现松耦合,使业务代码更加纯粹,即减少业务无关代码;另一方面实现统筹管理,提升业务开发效率,即可以随时给所有业务新增附加功能,而无须修改即有业务代码,这也体现了开闭原则,即对扩展开放,修改关闭。
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging 调试
Logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence 持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务
本文实例实现在指定包中的方法执行 前后执行切面方法,记录下方法输入、输出参数。
第一步:pom.xml中添加依赖
添加完上述依赖后,maven会自动下载依赖及间接依赖。如下图所示,SpringBoot AOP依赖包含3个依赖,spring-boot-starter-aop-1.3.6.RELEASE.jar、spring-sop-4.2.7.RELEASE.jar、aspectjweaver-1.8.9.jar。
第二步:创建切面方法
上述类中,有两个方法,分别对应前置和后置两种模式执行的方法。前置方法实现输入参数打印,后置方法实现输出参数打印。
第三步:新增AOP配置
在已有的beans.xml文件中新增aop配置,由于原来的beans.xml不支持aop配置,因此需要对该文件做2点调整:
新增头配置xmlns:aop、xsi:schemaLocation中关于aop的配置。
添加aop切面及模式配置。
本例中的配置仅截取关键配置项。
配置参数解释说明:
aop.pointcut,横切点,即在什么位置执行切面方法。
aop.expression,横切点规则表达式,过滤符合规则的切点。有关表达式规则将会在另外一篇文章中详细说明。
aop.aspect,切面。
aop:before,前置模式,切面执行模式。
aop:after-returning,后置返回模式,切面执行模式。
程序正常运行,指定包中的方法在执行前后均会执行切面服务。本文仅对AOP进行了简要说明,更加详细深入的说明请参考网上的其他资料。
由于刚开始梳理这块内容,知识面还不够宽,如果文中有错误之处,希望大家能够指出,谢谢!
1.前言说明
AOP即Aspect-Oriented Programming,面向切面的编程,与OOP想对应,是OOP的补充和完善,OOP横向上区分一个个类,AOP则从纵向上考察对象。AOP是一种动态地将代码切入到类的指定方法、指定位置上的编程思想。AOP一方面实现松耦合,使业务代码更加纯粹,即减少业务无关代码;另一方面实现统筹管理,提升业务开发效率,即可以随时给所有业务新增附加功能,而无须修改即有业务代码,这也体现了开闭原则,即对扩展开放,修改关闭。
2.应用场景
Log日志管理Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging 调试
Logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence 持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务
3.实例说明
本文通过一个实例来说明SpringBoot中AOP的配置方式,至于其他的框架的配置方法,没有什么大差异,主要差一点会在依赖包上,Java方法类及AOP配置没有大差别。本文实例实现在指定包中的方法执行 前后执行切面方法,记录下方法输入、输出参数。
第一步:pom.xml中添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
添加完上述依赖后,maven会自动下载依赖及间接依赖。如下图所示,SpringBoot AOP依赖包含3个依赖,spring-boot-starter-aop-1.3.6.RELEASE.jar、spring-sop-4.2.7.RELEASE.jar、aspectjweaver-1.8.9.jar。
第二步:创建切面方法
public class LogAspect { private static final Logger logger = LoggerFactory.getLogger(LogAspect.class); // 前置通知 public void beforeAdvice(JoinPoint joinPoint){ logger.info("============before advice"); logger.info(joinPoint.getSignature().getDeclaringTypeName() + " [input parameters] " + Arrays.toString(joinPoint.getArgs())); } // 后置通知 public void afterAdvice(JoinPoint joinPoint, Object retValue){ logger.info("============after advice"); logger.info(joinPoint.getSignature().getDeclaringTypeName() + " [output parameters] " + retValue); } }
上述类中,有两个方法,分别对应前置和后置两种模式执行的方法。前置方法实现输入参数打印,后置方法实现输出参数打印。
第三步:新增AOP配置
在已有的beans.xml文件中新增aop配置,由于原来的beans.xml不支持aop配置,因此需要对该文件做2点调整:
新增头配置xmlns:aop、xsi:schemaLocation中关于aop的配置。
添加aop切面及模式配置。
本例中的配置仅截取关键配置项。
<?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-3.0.xsd"> <bean id="logAspect" class="com.loongshawn.aop.LogAspect"/> <aop:config> <aop:pointcut id="pointcut" expression="execution(* com.loongshawn.method.ces..*.*(..))" /> <aop:aspect ref="logAspect"> <aop:before pointcut-ref="pointcut" method="beforeAdvice"/> <aop:after-returning pointcut-ref="pointcut" arg-names="joinPoint,retValue" returning="retValue" method="afterAdvice"/> </aop:aspect> </aop:config> </beans>
配置参数解释说明:
aop.pointcut,横切点,即在什么位置执行切面方法。
aop.expression,横切点规则表达式,过滤符合规则的切点。有关表达式规则将会在另外一篇文章中详细说明。
aop.aspect,切面。
aop:before,前置模式,切面执行模式。
aop:after-returning,后置返回模式,切面执行模式。
4.运行结果
程序正常运行,指定包中的方法在执行前后均会执行切面服务。本文仅对AOP进行了简要说明,更加详细深入的说明请参考网上的其他资料。
由于刚开始梳理这块内容,知识面还不够宽,如果文中有错误之处,希望大家能够指出,谢谢!
5.参考资料
(1).什么是面向切面编程AOP:https://www.zhihu.com/question/24863332相关文章推荐
- Spring -- aop(面向切面编程),前置&后置&环绕&抛异常通知,引入通知,自动代理
- Spring AOP面向切面编程
- Spring——AOP(面向切面编程)@AspectJ注解方式
- Spring之面向切面编程(AOP)四种通知
- SpringAOP 面向切面编程
- Spring -- aop(面向切面编程),前置&后置&环绕&抛异常通知,引入通知,自动代理
- spring(aop面向切面编程)
- Spring核心概念<二>:AOP面向切面编程
- Spring面向切面编程(AOP-execution表达式)
- Spring----AOP面向切面编程例子解析(附源码)
- Spring AOP面向切面编程
- Spring之AOP(面向切面编程)
- Spring实践之面向切面编程(AOP)
- 一个简单的Spring的AOP例子(JAVA面向切面编程)
- Spring学习笔记 —— AOP(面向切面编程) 之使用ProxyFactoryBean实现AOP
- 浅析spring中的AOP(面向切面编程)
- Spring面向切面编程(AOP)方式二
- 配置Spring AOP面向切面编程
- Spring(五、AOP面向切面编程)
- Spring之AOP面向切面编程