简介
什么是AOP,AOP用处:
在软件业,AOP为Aspect Oriented Programming的缩写,意为:,通过方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是的延续,是软件开发中的一个热点,也是框架中的一个重要内容,是的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的降低,提高程序的可重用性,同时提高了开发的效率。(copy自
百度百科)
简单明了的解释:
个人体验:
在之前工作参与的ASP.NET MVC的开发中,微软提供了Filter过滤器,通过继承AuthorizeAttribute重写4个方法可以对Controller不同时期的插入操作。这个Filter就是对AOP思想的一种实现。之前工作里利用Filter拦截请求进行 授权验证、任务埋点、错误/行为日志记录、跨域设置等功能实现。 但是在之前工作里很少用到AOP在BLL和DAL层的实现,也没有深入了解。 现在先Spring boot中的AOP写个demo了解一下在Spring boot中AOP的应用方式和实现。
实现步骤
在之前的两篇文章里,实现了一个最简单的api。
这里用在之前的基础上继续添加aop。这里使用自定义注解的方式,也是更接近于asp.net mvc中的【】特性方式。
1. 打开pom.xml,添加aop配置节点
org.springframework.boot spring-boot-starter-aop
点击View -->Tool Windows-->Maven Projects,弹出maven管理工具栏。
在Maven Project工具栏点击这个[ReimportAllMavenProjects]小圆圈,就会解析刚刚添加的配置节点。
2.创建一个类作为切面类
(1)使用@Configuration注解 声明这是一个配置类。或者使用@Component注解也可以;
(2)使用@Aspect注解,声明这是一个切面。
(3)使用@Pointcut定义一个切入点,切入点使用execution表示, execution表达式的使用方式之前文章里转载过一篇,可参考 ;这里的意思是切入com.example.demo项目下controller文件夹内TestController下的所有方法。
package com.example.demo.aop;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.context.annotation.Configuration;/** * @author:liucx * @date:2018-1-21 * @description:控制器切面拦截 *///配置注解,@Component也可以@Configuration//切面注解@Aspectpublic class ControllerFilter { //定义一个切入点 @Pointcut("execution(* com.example.demo.controller.TestController.*(..))") public void ActionFilter() {} @Before("ActionFilter()") public void BeforeAction(JoinPoint point) { System.out.println("before切面"); //ToDoSomething }}
3.运行项目,在浏览器运行testcontroller内定义的路由
在方法运行之前,已经执行了在切面内执行的输出。
总结:
这里只使用了最简单的方式,也只展示了@Before这一种注解,更详细的spring 中aop的实现还请参考其他文档。
因为没做过java,也是搜着资料摸着黑瞎写,所以各种描述语言多有不准确,仅作参考。如有错误还请指正。