Spring AOP如何实现简单的日志切面

  介绍

本篇文章给大家分享的是有关Spring AOP如何实现简单的日志切面,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看AOP吧。

1。什么是AOP ?

AOP的全称为面向方面的编程,译为面向切面编程,是通过预编译方式和运行期动态代理实现核心业务逻辑之外的横切行为的统一维护的一种技术.AOP是面向对象编程(OOP)的补充和扩展。利用AOP可以对业务逻辑各部分进行隔离,从而达到降低模块之间的耦合度,并将那些影响多个类的公共行为封装到一个可重用模块,从而到达提高程序的复用性,同时提高了开发效率,提高了系统的可操作性和可维护性。

2。为什么要用AOP ?

在实际的Web项目开发中,我们常常需要对各个层面实现日志记录,性能统计,安全控制,事务处理,异常处理等等功能。如果我们对每个层面的每个类都独立编写这部分代码,那久而久之代码将变得很难维护,所以我们把这些功能从业务逻辑代码中分离出来,聚合在一起维护,而且我们能灵活地选择何处需要使用这些代码。

3。AOP的核心概念

名词概念理解通知(建议)拦截到连接点之后所要执行的代码,通知分为前置,后置,异常,最终,环绕通知五类我们要实现的功能,如日志记录,性能统计,安全控制,事务处理,异常处理等等,说明什么时候要干什么连接点(联合点)被拦截到的点,如被拦截的方法,对类成员的访问以及异常处理程序块的执行等等,自身还能嵌套其他的联合PointSpring允许你用通知的地方,方法有关的前前后后(包括抛出异常)切入点(切入点)对连接点进行拦截的定义指定通知到哪个方法,说明在哪干切面(方面)切面类的定义,里面包含了切入点(切入点)和通知(建议)的定义切面就是通知和切入点的结合目标对象(目标对象)切入点选择的对象,也就是需要被通知的对象,由于Spring AOP通过代理模式实现,所以该对象永远是被代理对象业务逻辑本身织入(编织)把切面应用到目标对象从而创建出AOP代理对象的过程。织入可以在编译期,类装载期,运行期进行,而春天采用在运行期完成切点定义了哪些连接点会得到通知引入(介绍)可以在运行期为类动态添加方法和字段,春天允许引入新的接口到所有目标对象引入就是在一个接口/类的基础上引入新的接口增强功能AOP代理(AOP代理)Spring AOP可以使用JDK动态代理或者CGLIB代理,前者基于接口,后者基于类通过代理来对目标对象应用切面

Spring AOP

1。简介

AOP是春天框架中的一个核心内容。在春天中,AOP代理可以用JDK动态代理或者CGLIB代理CglibAopProxy实现.Spring AOP中代理由Spring的IOC容器负责生成和管理,其依赖关系也由国际奥委会容器负责管理。

2。相关注解

注解说明@Aspect将一个java类定义为切面类@Pointcut定义一个切入点,可以是一个规则表达式,比如下例中某个包下的所有函数,也可以是一个注解等@Before在切入点开始处切入内容@After在切入点结尾处切入内容@AfterReturning在切入点返回内容之后处理逻辑@Around在切入点前后切入内容,并自己控制何时执行切入点自身的内容@AfterThrowing用来处理当切入内容部分抛出异常之后的处理逻辑@Order AOP切(100)面执行顺序,@Before数值越小越先执行,@After和@AfterReturning数值越大越先执行其中@Before, @After, @AfterReturning, @Around, @AfterThrowing都属于通知(建议)。

利用AOP实现网络日志处理

1。构建项目

2。添加依赖

 & lt; dependencies>
  & lt; dependency>
  & lt; groupId> org.springframework.boot
  & lt; artifactId> spring-boot-starter-web
  & lt;/dependency>
  
  & lt; dependency>
  & lt; groupId> org.springframework.boot
  & lt; artifactId> spring-boot-starter-test
  & lt; scope> test
  & lt;/dependency>
  & lt; !——,热部署模块,——比;
  & lt; dependency>
  & lt; groupId> org.springframework.boot
  & lt; artifactId> spring-boot-devtools
  & lt; optional> true, & lt; !——,这个需要为,true 热部署才有效,——比;
  & lt;/dependency>
  & lt; !——, Spring  AOP ——比;
  & lt; dependency>
  & lt; groupId> org.springframework.boot
  & lt; artifactId> spring-boot-starter-aop
  & lt;/dependency>
  & lt;/dependencies> 

3。Web日志注解

 @Documented
  @Retention (RetentionPolicy.RUNTIME)
  @Target (ElementType.METHOD)
  public  @interface  ControllerWebLog  {
  ,String 名称();//所调用接口的名称
  ,,,,boolean  intoDb (), default 假;//标识该条操作日志是否需要持久化存储
  }

Spring AOP如何实现简单的日志切面