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. IOS VFL语言(页面布局)

    ● 什么是VFL语言 ● VFL全称是Visual Format Language,翻译过来是“可视化格式语言” ● VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言     VFL ...

  2. Error: Error SSL Required Code: 403

    Error: Error SSL Required Code: 403 Error Message If the 'services' Web directory for ArcGIS is set ...

  3. 【洛谷2624】[HNOI2008] 明明的烦恼(Python+利用prufer序列结论求解)

    点此看题面 大致题意: 给你某些点的度数,其余点度数任意,让你求有多少种符合条件的无根树. \(prufer\)序列 一道弱化版的题目:[洛谷2290][HNOI2004] 树的计数. 这同样也是一道 ...

  4. IO缓冲区

    标准IO提供的三种类型的缓冲模式: (1)按块缓存:在填满缓冲区后才进行实际的设备读写操作 (2)按行缓存:指在接收到换行符('\n’)之前,数据都是先缓存在缓冲区的 (3)不缓存:允许你直接读写设备 ...

  5. Git免密码提交

    下面说一下https克隆的方式免密码提交 在我们下载链接前面加上账号:密码@即可 方式一: 使用https的方式克隆代码 git clone '地址' 查看项目中的配置文件 vim .git/conf ...

  6. 【luogu P1903 [国家集训队]数颜色】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1903 裸的...带修莫队... 比较麻烦吧(对我来说是的) 两个变量分开记录查询和修改操作. #includ ...

  7. [Linux/Unix]常用命令

    1.查看日志后200行有“TNS字符串的详细信息 file_name |grep TNS 实时查看文件情况: tail -f file_name 2.查看路由情况: #Linux环境 tracerou ...

  8. Navicat for Mysql中错误提示索引过长1071-max key length is 767 byte

    1.建用户信息表 tb_person_info create table tb_person_info( user_id int(10) auto_increment, `name` varchar( ...

  9. fjutacm 2492 宠物收养所 : Splay 模板 O(nlogn)

    /** problem: http://www.fjutacm.com/Problem.jsp?pid=2492 Splay blog: https://tiger0132.blog.luogu.or ...

  10. MySQL——用户与密码

    mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码.通过下面的方式找到root默认密码,然后登录mysql进行修改: grep 'temporary p ...