Spring面向切面编程(AOP)

栏目: 编程工具 · 发布时间: 7年前

内容简介:Spring面向切面编程(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>

第二步:创建切面方法

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配置

<?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.运行结果

Spring面向切面编程(AOP)

程序正常运行,指定包中的方法在执行前后均会执行切面服务。本文仅对AOP进行了简要说明,更加详细深入的说明请参考网上的其他资料。

由于刚开始梳理这块内容,知识面还不够宽,如果文中有错误之处,希望大家能够指出,谢谢!

5.参考资料

(1).什么是面向切面编程AOP: https://www.zhihu.com/question/24863332


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python 3学习笔记(上卷)

Python 3学习笔记(上卷)

雨痕 / 电子工业出版社 / 2018-1 / 89

经过9 年的发展,Python 3 生态已相当成熟。无论是语言进化、解释器性能提升,还是第三方支持,都是如此。随着Python 2.7 EOF 日趋临近,迁移到Python 3 的各种障碍也被逐一剔除。是时候在新环境下学习或工作了。 人们常说Python 简单易学,但这是以封装和隐藏复杂体系为代价的。仅阅读语言规范很难深入,亦无从发挥其应有能力,易学难精才是常态。《Python 3学习笔记(......一起来看看 《Python 3学习笔记(上卷)》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具