SpringBoot中AOP的配置
2017-02-04 15:41
483 查看
AOP目的:
面向切面编程(aspect-oriented programming,AOP)主要实现的目的是针对业务处理过程中的切面进行提取,诸如日志、事务管理和安全这样的系统服务,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP术语详见:
http://www.cnblogs.com/lspz/p/6365445.html
简单例子:
1、在浏览器中打开http://start.spring.io/,如图
点击“Switch to the full version.”,勾选"Web"和AOP,然后点击“ Generate Project alt +”按钮,把文件保存到本地某个位置
2、解压文件直接在IDEA中open,项目目录如下:
3.编制Example.java存于demo\src\main\java\com\example\web下
4.编制WebLogAspect.java在demo\src\main\java\com\example\aop下:
5.运行
通过运行程序并访问:http://localhost:8080,可以获得下面的日志输出:
实现AOP的切面主要有以下几个要素:
使用@Aspect注解将一个java类定义为切面类。
使用@Pointcut定义一个切入点,可以是一个规则表达式,比如下例中某个package下的所有函数,也可以是一个注解等。
根据需要在切入点不同位置的切入内容,5种类型的通知。
总结:
使用http://start.spring.io/可以快速的搭建项目,另AOP原理主要是使用动态代理详见:
面向切面编程(aspect-oriented programming,AOP)主要实现的目的是针对业务处理过程中的切面进行提取,诸如日志、事务管理和安全这样的系统服务,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP术语详见:
http://www.cnblogs.com/lspz/p/6365445.html
简单例子:
1、在浏览器中打开http://start.spring.io/,如图
点击“Switch to the full version.”,勾选"Web"和AOP,然后点击“ Generate Project alt +”按钮,把文件保存到本地某个位置
2、解压文件直接在IDEA中open,项目目录如下:
3.编制Example.java存于demo\src\main\java\com\example\web下
package com.example.web; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class Example { @RequestMapping("/") public String home() { return "Hello World!"; } }
4.编制WebLogAspect.java在demo\src\main\java\com\example\aop下:
package com.example.aop; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; 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 { protected static org.slf4j.Logger logger = LoggerFactory.getLogger(WebLogAspect.class); @Pointcut("execution(public * com.example.web..*.*(..))") public void webLog() { } @Before("webLog()") public void doBefore(JoinPoint joinPoint) throws Throwable { System.out.println( "进入doBefore切面"); // 接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); // 记录下请求内容 logger.info("URL : " + request.getRequestURL().toString()); logger.info("HTTP_METHOD : " + request.getMethod()); logger.info("IP : " + request.getRemoteAddr()); logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); logger.info("ARGS : " + Arrays.toString(joinPoint.getArgs())); } @AfterReturning(returning = "ret", pointcut = "webLog()") public void doAfterReturning(Object ret) throws Throwable { // 处理完请求,返回内容 logger.info("RESPONSE : " + ret); } }
5.运行
通过运行程序并访问:http://localhost:8080,可以获得下面的日志输出:
实现AOP的切面主要有以下几个要素:
使用@Aspect注解将一个java类定义为切面类。
使用@Pointcut定义一个切入点,可以是一个规则表达式,比如下例中某个package下的所有函数,也可以是一个注解等。
根据需要在切入点不同位置的切入内容,5种类型的通知。
- 使用@Before在切入点开始处切入内容 - 使用@After在切入点结尾处切入内容 - 使用@AfterReturning在切入点return内容之后切入内容(可以用来对处理返回值做一些加工处理) - 使用@Around在切入点前后切入内容,并自己控制何时执行切入点自身的内容 - 使用@AfterThrowing用来处理当切入内容部分抛出异常之后的处理逻辑
总结:
使用http://start.spring.io/可以快速的搭建项目,另AOP原理主要是使用动态代理详见:
相关文章推荐
- SpringBoot环境下配置AOP切面实现权限拦截
- Spring-boot 配置Aop获取controller里的request中的参数以及其返回值
- SpringBoot中AOP的配置
- SpringBoot中AOP的配置
- 在SpringBoot中配置aop
- Spring boot + MySQl + druid + JPA + AOP pom文件 以及 application.yml 的配置
- Spring-boot 配置Aop获取controller里的request中的参数以及其返回值
- springboot之AOP配置
- springboot 配置AOP
- 关于springboot 配置文件、Aop配置以及jdbc配置
- springboot配置aop切面详解
- Springboot+Mybatis+Pagehelper+Aop动态配置Oracle、Mysql数据源
- Springboot配置aop
- Spring boot 集成 aop 配置
- Spring-boot 配置Aop获取controller里的request中的参数以及其返回值
- SpringBoot配置Aop笔记
- 用Spring配置文件或者注解方式实现AOP
- 使用Spring AOP 自动代理配置声明式事务
- [原]spring学习笔记9.3-Spring对Aop的支持-配置文件的方式
- 使用 来配置Spring AOP