简介
什么是AOP,AOP用处:
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。(copy自
百度百科https://baike.baidu.com/item/AOP/1332219?fr=aladdin)
个人体验:
在之前工作参与的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配置节点
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
点击View -->Tool Windows-->Maven Projects,弹出maven管理工具栏。
在Maven Project工具栏点击这个[ReimportAllMavenProjects]小圆圈,就会解析刚刚添加的配置节点。
2.创建一个类作为切面类
(1)使用@Configuration注解 声明这是一个配置类。或者使用@Component注解也可以;
(2)使用@Aspect注解,声明这是一个切面。
(3)使用@Pointcut定义一个切入点,切入点使用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
//切面注解
@Aspect
public 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,也是搜着资料摸着黑瞎写,所以各种描述语言多有不准确,仅作参考。如有错误还请指正。