当前位置: 首页 > news >正文

技术支持 哈尔滨网站建设重庆企业网站营销设计

技术支持 哈尔滨网站建设,重庆企业网站营销设计,专业做装修的网站,做境外的网站网站违法么认识 Spring AOP 1.什么是 AOP2.AOP 中的概念3.用 AOP 方式管理日志3.1 编写 AOP 日志注解类3.2 编写控制器用于测试 1.什么是 AOP AOP(Aspect Oriented Program,面向切面编程)把业务功能分为核心、非核心两部分。 核心业务功能&#xff1a…

认识 Spring AOP

  • 1.什么是 AOP
  • 2.AOP 中的概念
  • 3.用 AOP 方式管理日志
    • 3.1 编写 AOP 日志注解类
    • 3.2 编写控制器用于测试

1.什么是 AOP

AOP(Aspect Oriented Program面向切面编程)把业务功能分为核心、非核心两部分。

  • 核心业务功能:用户登录、增加数据、删除数据。
  • 非核心业务功能:性能统计、日志、事务管理。

在 Spring 的面向切面编程(AOP)思想里,非核心业务功能 被定义为 切面。核心业务功能和切面功能先被分别进行独立开发,然后把切面功能和核心业务功能 编织 在一起,这就是 AOP。
在这里插入图片描述
由此可见,AOP 将业务无关,却为业务模块所共同调用的逻辑封装起来,以便减少系统的重复代码,降低模块间的耦合度,利于未来的拓展和维护。这正是 AOP 的目的,它是 Spring 最为重要的功能之一,被广泛使用。

2.AOP 中的概念

  • 切入点pointcut):在哪些类、哪些方法上切入。
  • 通知advice):在方法前、方法后、方法前后做什么。
  • 切面aspect):切面 = 切入点 + 通知。即在什么时机、什么地方、做什么。
  • 织入weaving):把切面加入对象,并创建出代理对象的过程。
  • 环绕通知:AOP 中最强大、灵活的通知,它集成了前置和后置通知,保留了连接点原有的方法。

3.用 AOP 方式管理日志

下面通过实例演示如何用 AOP 方式管理日志。

3.1 编写 AOP 日志注解类

package com.example.demo.aop;import org.apache.commons.lang3.builder.ToStringBuilder;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
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;/*** Description:  使之成为切面类*/
@Aspect
/*** Description: 把切面类加入到IOC容器中*/
@Component
public class AopLog {private Logger logger = LoggerFactory.getLogger(this.getClass());//线程局部的变量,解决多线程中相同变量的访问冲突问题。ThreadLocal<Long> startTime = new ThreadLocal<>();//定义切点@Pointcut("execution(public * com.example..*.*(..))")public void aopWebLog() {}@Before("aopWebLog()")public void doBefore(JoinPoint joinPoint) throws Throwable {startTime.set(System.currentTimeMillis());// 接收到请求,记录请求内容ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 记录下请求内容logger.info("URL : " + request.getRequestURL().toString());logger.info("HTTP方法 : " + request.getMethod());logger.info("IP地址 : " + request.getRemoteAddr());logger.info("类的方法 : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());//logger.info("参数 : " + Arrays.toString(joinPoint.getArgs()));logger.info("参数 : " + request.getQueryString());}@AfterReturning(pointcut = "aopWebLog()",returning = "retObject")public void doAfterReturning(Object retObject) throws Throwable {// 处理完请求,返回内容logger.info("应答值 : " + retObject);logger.info("费时: " + (System.currentTimeMillis() - startTime.get()));}//抛出异常后通知(After throwing advice) : 在方法抛出异常退出时执行的通知。@AfterThrowing(pointcut = "aopWebLog()", throwing = "ex")public void addAfterThrowingLogger(JoinPoint joinPoint, Exception ex) {logger.error("执行 " + " 异常", ex);}}
  • @Before:在切入点开始处切入内容。
  • @After:在切入点结尾处切入内容。
  • @AfterReturning:在切入点 return 内容之后切入内容(可以用来对处理返回值做一些加工处理)。
  • @Around:在切入点前后切入内容,并自己控制何时执行切入点自身的内容。
  • @AfterThrowing:用来处理当切入内容部分抛出异常之后的处理逻辑。
  • @Aspect:标记为切面类。
  • @Component:把切面类加入到 IOC 容器中,让 Spring 进行管理。

3.2 编写控制器用于测试

下面的控制器构造了一个普通的 Rest 风格的页面。

package com.example.demo.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class AopLogController {@GetMapping("/aoptest")public String aVoid(){return "hello aop test";}
}

启动项目,访问 http://localhost:8080/aoptest

在这里插入图片描述
在控制台会输出如下信息。

在这里插入图片描述

http://www.yayakq.cn/news/709697/

相关文章:

  • 企业做网站乐云seo快速上线福田做商城网站建设哪家公司便宜点
  • 泰安公司做网站微信怎么自创小程序
  • 台市住房和城乡建设局网站嘉兴云推广网站
  • 网站地图 格式凡科建站快车代理登录
  • 台州网络建站模板dedecms做的系统_网站主页是哪一个文件
  • 某学校网站的安全建设方案网络运营者应当按照网络安全等级保护制度的要求
  • 专业做家电经销的网站中太建设集团网站
  • 招商局网站建设方案注册网站会员
  • 苏州网站建设店铺装修网站设计运行费用
  • 建站网站排行榜元气森林网络营销方式
  • 慈溪哪点有学做网站的大连比较好的软件公司
  • gucci网站wordpress安装主题后无法查看媒体
  • 精品课程网站源码四川省建设厅网站电话
  • 网站运营方式网站里的友情链接
  • 好的外国设计网站推荐电子工程世界注册
  • 想找私人做网站凡科自助建站网站
  • 寄生虫网站排名代做怎么搞到网站
  • wordpress仿站实战教程wordpress多租户
  • 虎丘网站建设岱山建设局网站
  • 论坛网站建设视频教程四川住房城乡建设部网站
  • 郑州做花店网站个人做网站最方便的方法
  • 徐州网站建设商城制作网站推广seo蒙自网站开发
  • 广西柳州做网站成都德阳网站建设
  • 前台和后台网站开发的区别网站推广塔山双喜
  • 网站后台功能技术要求做网站保存什么格式最好
  • 营销网站的问题与优势自己动手建立个人网站
  • 深圳网站建设微信商城开发win2012搭建WordPress
  • 怎么看网站做的外链百度不收录网站首页
  • 北京网站建设工作室dw建设网站教案
  • 都有什么类别的网站新媒体营销论文