Aop是spring的两大核心之一

那么如何在springboot中采用注解的形式实现aop那?

1)首先我们定义一个相关功能的切面类 并 采用@Aspect 注解来声明当前类为切面 同时采用@Component 注解将当前类交与spring管理

@Aspect
@Component
public class HttpAspect {}

2)定义切点 声明一个方法将在方法上采用@Pointcut

  /**
* 定义一个方法 为切点 统一的切入方法点
*/
@Pointcut(value = "execution(public * com.lwd.web.LoginController.*(..))")
public void log(){ }

3) 声明增强方法

    /**
* 采用统一切入点进行增强 切入的方法 执行之前进行切入
*/
@Before("log()")
public void login(){
System.out.println("----------ddddddddddddd----------------");
}
 /**
* 切入的方法执行完成之后执行
*/
@After("log()")
public void doAfter(){
System.out.println("777777777777777777777777");
} @Before("log()")
public void doAfterReturning(JoinPoint joinPoint){ ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
//url
String requestURI = request.getRequestURI();
logger.info("url={}",requestURI);
//method
String method = request.getMethod();
logger.info("method=",method);
//ip
//类方法
Signature signature = joinPoint.getSignature();
String declaringTypeName = signature.getDeclaringTypeName();
String name = signature.getName(); Object[] args = joinPoint.getArgs();
}
//如何在做切面的时候获取切点的返回数据内容
@AfterReturning(returning = "object",pointcut = "log()")
public void doAfterReturning(Object object){ }

具体代码实现方式:

package com.lwd.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; /**
* 1.定义了一个切面类 @Aspect 注解 @Component 注解
* 2.定义切点 声明一个方法 添加@Pointcut 注解 execution表达式来声明切入的点
* 3.定义 增强 @befor @after @AfterReturning 等一系列注解来进行增强
* Created by andyliu on 2018/11/5.
*/ @Aspect
@Component
public class HttpAspect { private static final Logger logger = LoggerFactory.getLogger(HttpAspect.class); /**
* 这样试用于对指定方法进行增强 或者 对所有方法都进行增强 当前表达式只当前增强方法使用
*/ @Before("execution(public * com.lwd.web.LoginController.*(..))")
public void doBefor(){
System.out.println("---实现对当前类下的任意方法执行前进行增强----");
} /**
* 定义一个方法 为切点 统一的切入方法点
*/
@Pointcut(value = "execution(public * com.lwd.web.LoginController.*(..))")
public void log(){ } /**
* 采用统一切入点进行增强 切入的方法 执行之前进行切入
*/
@Before("log()")
public void login(){
System.out.println("----------ddddddddddddd----------------");
} /**
* 切入的方法执行完成之后执行
*/
@After("log()")
public void doAfter(){
System.out.println("777777777777777777777777");
} /**
* 获取http请求
* @param joinPoint
*/
@Before("log()")
public void doAfterReturning(JoinPoint joinPoint){
//requestContextHolder request reponse 控制器
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//获取httpServlerRequst请求
HttpServletRequest request = requestAttributes.getRequest();
//url
String requestURI = request.getRequestURI();
logger.info("url={}",requestURI);
//method
String method = request.getMethod();
logger.info("method=",method);
//ip
String remoteAddr = request.getRemoteAddr();
//类方法
Signature signature = joinPoint.getSignature();
String declaringTypeName = signature.getDeclaringTypeName();
String name = signature.getName(); Object[] args = joinPoint.getArgs();
}
//如何在做切面的时候获取切点的返回数据内容
@AfterReturning(returning = "object",pointcut = "log()")
public void doAfterReturning(Object object){ } }

spring boot 入门3 如何在springboot 上使用AOP的更多相关文章

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

    关于SpringBoot和PageHelper,前篇博客已经介绍过Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件,前篇博客大致讲述了S ...

  2. Springboot 系列(一)Spring Boot 入门篇

    注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 由于 J2EE 的开发变得笨重,繁多的配置, ...

  3. 161103、Spring Boot 入门

    Spring Boot 入门 spring Boot是Spring社区较新的一个项目.该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验 ...

  4. Spring Boot入门教程1、使用Spring Boot构建第一个Web应用程序

    一.前言 什么是Spring Boot?Spring Boot就是一个让你使用Spring构建应用时减少配置的一个框架.约定优于配置,一定程度上提高了开发效率.https://zhuanlan.zhi ...

  5. Spring Boot入门(四):开发Web Api接口常用注解总结

    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...

  6. Spring Boot入门(二):使用Profile实现多环境配置管理&如何获取配置文件值

    在上一篇博客Spring Boot入门(一):使用IDEA创建Spring Boot项目并使用yaml配置文件中,我们新建了一个最原始的Spring Boot项目,并使用了更为流行的yaml配置文件. ...

  7. Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理

    本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 ...

  8. Spring Boot入门 and Spring Boot与ActiveMQ整合

    1.Spring Boot入门 1.1什么是Spring Boot Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品.无 ...

  9. Spring Boot 入门day01

    一.Spring Boot入门 1.Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特 ...

随机推荐

  1. python27 文件读写

    fileobject = open(文件的绝对路径或相对路径,读写模式,其他可选参数) '''r-读 文件不存在报错FileNotFoundError''' try: f = open('file0. ...

  2. 【luogu P3369 【模板】普通平衡树(Treap/SBT)】 题解 pb_ds

    我永远都爱STL ! 我爱PB_DS ! #include <iostream> #include <cstdio> #include <ext/pb_ds/tree_p ...

  3. Laravel5 打印SQL

    在src/Illuminate/Database/Connection.php里打印SQL默认是关闭的,见https://github.com/laravel/framework/commit/e0a ...

  4. webapi2返回 已拒绝为此请求授权。

    开始用的webapi2中是没有问题的,后来再项目中加了个过滤器并继承了AuthorizeAttribute 然后在全球文件中注册你的过滤器,让每次执行的时候都会进来 我项目中只重写了OnAuthori ...

  5. SQLite动态库下载

    其中带有“bundle”字样的表示动态库是按混合模式编译的,在 使用的时候只需要System.Data.SQLite.dll就可以了 而不带“bundle”的则是将非托管部分和托管部分分别编 译,Sy ...

  6. linux系统状态查看/管理相关命令

    系统状态查看命令: w 查看用户 top 系统进程监控 uptime 查看某台服务器运行了多久 htop 更加先进的交互式监控工具(需要安装) iotop 监控并实时显示磁盘IO输入和输出和程序进程( ...

  7. 基于Cent os 云服务器中SVN 服务器的搭建---具体实践是可行的 一次备注便于后续查找

    https://blog.csdn.net/shadowyingjian/article/details/80588544http://www.hongyanliren.com/2015m04/329 ...

  8. TCP套接字

    端口的概念 每个电脑一根网线,但是你挂着QQ的同时还可以浏览网页.两个不同应用的数据在同一根网线里是如何传输的呢?根据七层互联网模型,这个功能由运输层(TCP是运输层主要协议)实现.怎么实现呢,在网络 ...

  9. zepto 基础知识(4)

    61.prev prev() 类型:collection prev(selector) 类型:collection 获取对相集合中每一个元素的钱一个兄弟节点,通过选择器来进行过滤 62.prev pr ...

  10. jquery表单属性筛选元素

    $(":button") 选择所有按钮元素类型为按钮的元素. 等于$('input[type="button"]') $(":checkbox&quo ...