AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
前言
最近在学习SpringBoot,在学习了SpringBoot之后的感觉就是给人全新的感觉,整个项目都几乎不怎么使用配置文件,全部通过注解来进行配置,再结合Maven,开发效率有大大的提升。
正文
在写AOP之前,首先要先引入AOP的依赖,在项目的pom.xml中加入如下依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
通过AOP来获取HTTP请求头的信息以及参数,从而可以对访问请求进行验证。
public class HttpAspect { private final static Logger LOGGER = LoggerFactory.getLogger(HttpAspect.class); @Pointcut(value = "execution(public * com.boy.controller.BoyController.*(..))") public void p(){} @Before("p()") public void doBefore(JoinPoint joinPoint){ ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); //URL LOGGER.warn("URL={}",request.getRequestURL()); //Method LOGGER.warn("Method={}",request.getMethod()); //IP LOGGER.warn("IP={}",request.getRemoteAddr()); //Class.Method LOGGER.warn("CLass.Method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName()+"()"); //Args LOGGER.warn("Args={}",joinPoint.getArgs()); //...其余操作 } @After("p()") public void doAfter(){ LOGGER.warn("HttpAspect doAfter Running : "+new Date().getTime()); } }
由上述代码可以得到HTTP请求的信息,这样可以根据业务需要来进行对请求的验证或审核。运行结果如下:
2017-05-05 10:49:30.891 WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect : URL=http://localhost:8080/boys/3 2017-05-05 10:49:30.891 WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect : Method=GET 2017-05-05 10:49:30.891 WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect : IP=0:0:0:0:0:0:0:1 2017-05-05 10:49:30.893 WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect : CLass.Method=com.boy.controller.BoyController.getBoy() 2017-05-05 10:49:30.893 WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect : Args=3 2017-05-05 10:49:30.968 WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect : HttpAspect doAfter Running : 1493952570968
来看下哈
@﹏夜色ㄨ静好 欢迎
感谢楼主的分享
感谢楼主的分享
@rushmyessay.cn代写服务
你的代码高亮复制功能怎么实现的,请教
@风神博客 使用的是Crayon Syntax Highlighter代码高亮插件
代码好高大上的感觉呢。。。
@代理记账
依赖注入,控制反转
@WordPress头条 对
默默点赞
@春熙路 谢谢
极大缩小了你们开发的时间
@星空游戏 只能说提高了一定的开发效率
SpringCloud使用Zuul出现“Forwarding error”错误解决方法
Chatroulette-全世界随机视频聊天网站
IntelliJ IDEA下将JavaWeb打包成war包并发布到tomcat步骤说明
LiRecord留言板系统V2.0正式版发布
SpringBoot打包成war包并放置在tomcat运行
SpringBoot+Shiro整合进行登录验证与权限控制
多风格自适应WordPress主题Puock正式开源!
非大众版WordPress纯代码实现阅读量统计
面包多WordPress插件 – 把你的文章变成付费版
git reset —hard后暂存区代码跑哪儿去了?
选择表情
分享至