​ 面向切片编程在很多项目中都有使用过,使用的场景也是较多。一个东西它之所以存在,肯定是解决了一些实际过程中的问题。要多去思考它存在的意义,就能理解的更深刻,才能举一反三。

​ 为什么会有面向切片编程。程序中最讨厌的事是复制代码,如果你发现同一段代码,或者相似的代码需要在多处出现,就会感觉到明显的“坏味道”。你不得不去维护散落在各个地方的同样逻辑,随着业务的不断复杂或者变更,这令人难以维护。这时有些人就提出来了,这不简单吗,我把这些相同的代码提取成一个方法,然后在需要的地方调用它,就可以减轻维护压力。对于相似的代码,抽象出一个方法兼容几个相似的逻辑,也可以提取出公共的方法。但是你还是需要在你使用的地方去显式的调用它,这对于公共方法的调用者类是耦合的。有没有一种无侵入式的方式,优雅的进行公共逻辑的调用呢,这就是面向切面编程要解决的问题。

​ 面向切面编程(AOP)专门用来解决各个模块中交叉关注点的问题,如事务管理、安全检查、缓存等。话不多说,今天我们讲下面向如何使用面向切片编程进行全局日志记录。

package com.xxx.xxx.component;import com.alibaba.fastjson.JSON;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;@Aspect
@Component
public class WebLogAspect {private Logger logger = LoggerFactory.getLogger(WebLogAspect.class);// 定义切入点的名称(如果多个增强处理,可以方便的使用名称)@Pointcut("execution(* com.xxx.xxx.controller.*.*(..))")public void webLog(){}@Around("webLog()")public Object around(ProceedingJoinPoint pjp) throws Throwable {long startTime = System.currentTimeMillis();// 接收到请求,记录请求内容ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 记录下请求内容logger.info("URL:{},请求开始", request.getRequestURL().toString());logger.info("Params : " + Arrays.toString(pjp.getArgs()));// result的值就是被拦截方法的返回值Object result = pjp.proceed();logger.info("URL:{},请求结束,result:{} ", request.getRequestURL().toString(), JSON.toJSONString(result));logger.info("Cost Time : {}ms" ,(System.currentTimeMillis() - startTime));return result;}
}

​ 增强处理类型:before,after,after-returning,after-throwing,around

​ 这里简单的举了一个全局日志的例子,实际中使用起来很简单方便。这里就会有同学又有疑问了:拦截器和AOP有什么区别呢?

​ 拦截器主要是拦截url的请求,进行请求的分发及路由,到真正的处理类。aop主要拦截spring中Bean的生命周期的访问,aop使用的是代理模式。

面向切面编程的简单应用相关推荐

  1. 切面是异步还是同步操作‘_Autofac的AOP面向切面编程研究

    什么是AOP: 我的理解是 把系统性的编程工作封装起来 =>我给这个取个名字叫 "Aspect",然后通过AOP技术把它切进我们的业务逻辑代码 => "业务& ...

  2. Autofac的AOP面向切面编程研究

    我的理解是 把系统性的编程工作封装起来 =>我给这个取个名字叫 "Aspect",然后通过AOP技术把它切进我们的业务逻辑代码 => "业务" 这样 ...

  3. 简单六步上手spring aop,通过各种类型通知,面向切面编程,实现代码解耦(超详细)

    aop(面向切面编程)是一种重要的编程思想,是对面向对象编程的完善和补充.我们都很熟悉"高内聚,低耦合",这是评判代码是否优质的标准之一,而aop思想,就是对这一标准的具体实现. ...

  4. 简单理解AOP(面向切面编程)

    来源:http://www.cnblogs.com/jyh317/p/3834271.html AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式 ...

  5. AOP面向切面编程简单使用

    一.AOP介绍 1.AOP是什么? AOP即为面向切面编程,和Java的OOP面向对象编程一样,都是一种编程思想,一些先行者已经为面向切面编程开发了一套语言来支持. 2.AOP的作用是什么? 通过预编 ...

  6. 【Spring】面向切面编程AOP

    AOP基础 什么是AOP [废话解释]在软件业,AOP全称Aspect Oriented Programming 即:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AO ...

  7. Spring 面向切面编程

    AOP,也就是面向方面编程或者说面向面编程,是一种很重要的思想.在企业级系统中经常需要打印日志.事务管理这样针对某一方面的需求,但是传统的面向对象编程无法很好的满足这些需求.因此催生了面向切面编程这样 ...

  8. 【SSM框架系列】Spring 的 AOP(面向切面编程)

    什么是 AOP AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP 是 OOP ...

  9. Spring(4)——面向切面编程(AOP模块)

    Spring AOP 简介 如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用. AOP 即 Aspect Orien ...

最新文章

  1. Control~Kalman filter
  2. 算法-----有序数组的平方
  3. libtorch demo
  4. 1.java注释的类型_HappyBKs教你写Java注解(1)——注解的分类、运行机制、作用域及概念汇总...
  5. [OS复习]文件管理
  6. 清华大学人工智能研究院成立大数据智能研究中心
  7. 微软加入Linux基金会共建开源生态,并对谷歌加入.NET社区的举措表示欢迎
  8. mt7620a拓展串口
  9. ubuntu无法登陆mysql_ubuntu11.04mysql报错、无法正常工作、无法登陆mysql
  10. 面试题50. 第一个只出现一次的字符
  11. 深入理解分布式事务(XA及rocketmq事务)
  12. C语言关键字浅析-signed
  13. python实现Pandas电话数据分析
  14. protel 99se 负片打印
  15. samsung 手机webview 加载https 页面不显示问题
  16. 机器学习-凸优化理论-课堂笔记
  17. 什么是HTTP状态码 常见状态码集合
  18. 编写一个函数isprime(n).判断整数n是否为素数.编写程序使用此函数,当输入一个整数时,对它进行判断,当为素数时,输出1.否则,输出0....
  19. Modeling Task Relationships in Multi-task Learning withMulti-gate Mixture-of-Experts
  20. Holder不等式的证明

热门文章

  1. max3490esa_MAX490EESA+T
  2. 中国的第一封EMAIL与GOOGLE之退出
  3. 设计模式-结构模式-装饰器模式 decorater
  4. [jdk]jdk7,jdk8,jdk14 linux版本,windows版本下载
  5. 环信即时通讯IM重大更新助力企业数字化转型
  6. AD学习之旅(1)— Altium Designer 20 软件下载与安装
  7. 风电预应力混凝土塔筒节段边缘分布弯矩求解
  8. 大数据智能分析的优势有哪些
  9. 真刺激!电容放电,火花四溅!
  10. Retrofit-解耦