2019独角兽企业重金招聘Python工程师标准>>>

简介

什么是AOP,AOP用处:

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。(copy自

百度百科https://baike.baidu.com/item/AOP/1332219?fr=aladdin)

简单明了的解释:http://blog.csdn.net/u010926964/article/details/51538348

个人体验:

在之前工作参与的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表示, execution表达式的使用方式之前文章里转载过一篇,可参考https://my.oschina.net/CrazyBoy1024/blog/1604383 ;这里的意思是切入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,也是搜着资料摸着黑瞎写,所以各种描述语言多有不准确,仅作参考。如有错误还请指正。

转载于:https://my.oschina.net/CrazyBoy1024/blog/1610746

spring boot初体验(三)Spring AOP相关推荐

  1. Spring Boot 初体验(8)配置server信息

    配置端口号: Spring boot 默认端口是8080,如果想要进行更改的话, 需要修改applicatoin.properties文件,在配置文件中加入: server.port=8081 配置c ...

  2. Java开发 - 单点登录初体验(Spring Security + JWT)

    目录​​​​​​​ 前言 为什么要登录 登录的种类 Cookie-Session Cookie-Session-local storage JWT令牌 几种登陆总结 用户身份认证与授权 创建工程 添加 ...

  3. springboot导包显示不存在_基础篇:Spring Boot入门体验(图文教程)

    优质文章,及时送达 什么是 Spring Boot? Spring Boot 是由 Pivotal 团队提供的全新框架.Spring Boot 是所有基于 Spring Framework 5.0 开 ...

  4. Spring Boot:(三)开发Web应用之Thymeleaf篇

    Spring Boot:(三)开发Web应用之Thymeleaf篇 前言 Web开发是我们平时开发中至关重要的,这里就来介绍一下Spring Boot对Web开发的支持. 正文 Spring Boot ...

  5. Spring boot入门(三):集成AdminLTE(Freemarker),结合generate代码生成器,利用DataTable和PageHelper分页...

    Spring boot入门(三):SpringBoot集成结合AdminLTE(Freemarker),利用generate自动生成代码,利用DataTable和PageHelper进行分页显示 标题 ...

  6. Spring Security 初体验

    Spring Security 初体验 ①认证过滤器(登录) 用于接收前端用户登录信息(username和password)与数据库用户信息(通过UserDetailsService查询)就行判断. ...

  7. Spring Boot (一)Spring Boot 概述

    Spring Boot(一) 一 . Spring Boot 是什么? 首先Spring Boot不是一个框架,它是一种用来轻松创建具有最小或零配置的独立应用程序的方式.这是方法用来开发基于Sprin ...

  8. boot入门思想 spring_什么是Spring boot?Spring Boot快速入门以及Spring Boot实例教程

    转自:http://www.jianshu.com/p/d24bceea7665 简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候, ...

  9. Spring Boot(1):参见Spring Boot

    2019独角兽企业重金招聘Python工程师标准>>> 同步自我的个人博客墨语的后花园,请多多指教. 最近开始看Spring Boot相关方面的文章,主要原因还是看网上说的这家伙开发 ...

最新文章

  1. Android开机logo修改方法
  2. MySQL 4到5的快速升级
  3. 比较 J2EE,eclipse adt扩展和Android studio几个类似IDE菜单的异同点
  4. JAX-RS 2.1的Jersey客户端依赖性
  5. php 64位编码解码,php base64 编码和解码
  6. 2021考研初试成绩多少分过线?
  7. @JsonInclude、@JsonIgnore和@JsonFormat注解
  8. java的启动信息_Java实现软件运行时启动信息窗口的方法
  9. Microsoft Office 2016 简体中文 Vol 版镜像下载(Pro Plus、Visio、Project 下载)
  10. php 通过 谷歌邮箱发送邮件
  11. excel编写计算机台账,[一键生成excel表格]excel表格生成台账的方法
  12. 解决Unable to find a single main class from the following candidates
  13. Ribbon与Eureka整合分析(四)、客户端配置延迟加载和启用饥饿加载
  14. FMEA和HAZOP在煤气柜风险分析综合应用
  15. pytorch保存onnx模型
  16. google play 此应用使用的结算功能版本已不能受支持。
  17. 高考后能学习——阿里云-winserver服务器购买以及使用(包含【.Net】、【PHP】、【MySQL】、【Navicat】、【Java】、安装)
  18. 原生JS,运动的小人
  19. matlab油气田渗流,基于有限差分的油水兩相渗流方程求解油藏数值模拟毕业设计稿.doc...
  20. Go运行时bug调试过程解析

热门文章

  1. linux命令地址,[命令] Linux IP 命令 IP(管理地址)
  2. java中的linked_为Java实现LinkedArray
  3. 解决nginx端口占用问题
  4. SQLServer IP不能登录问题解决
  5. 解决vim中鼠标右键无法复制的问题
  6. 解决启动nginx时报80端口被占用的问题
  7. 错误:invalid_client没有应用程序名称
  8. require()和library()有什么区别?
  9. 如何禁用Web表单字段/输入标签上的浏览器自动完成功能?
  10. springmvc个人小结