spring boot 入门3 如何在springboot 上使用AOP
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的更多相关文章
- Spring boot入门(三):SpringBoot集成结合AdminLTE(Freemarker),利用generate自动生成代码,利用DataTable和PageHelper进行分页显示
关于SpringBoot和PageHelper,前篇博客已经介绍过Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件,前篇博客大致讲述了S ...
- Springboot 系列(一)Spring Boot 入门篇
注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 由于 J2EE 的开发变得笨重,繁多的配置, ...
- 161103、Spring Boot 入门
Spring Boot 入门 spring Boot是Spring社区较新的一个项目.该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验 ...
- Spring Boot入门教程1、使用Spring Boot构建第一个Web应用程序
一.前言 什么是Spring Boot?Spring Boot就是一个让你使用Spring构建应用时减少配置的一个框架.约定优于配置,一定程度上提高了开发效率.https://zhuanlan.zhi ...
- Spring Boot入门(四):开发Web Api接口常用注解总结
本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...
- Spring Boot入门(二):使用Profile实现多环境配置管理&如何获取配置文件值
在上一篇博客Spring Boot入门(一):使用IDEA创建Spring Boot项目并使用yaml配置文件中,我们新建了一个最原始的Spring Boot项目,并使用了更为流行的yaml配置文件. ...
- Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理
本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 ...
- Spring Boot入门 and Spring Boot与ActiveMQ整合
1.Spring Boot入门 1.1什么是Spring Boot Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品.无 ...
- Spring Boot 入门day01
一.Spring Boot入门 1.Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特 ...
随机推荐
- 高效实时的网络会议数据传输库—UDT
在视频会议系统的研发当中,我们的音.视频数据必须要有相应的可靠性作为保障,因为视频会议系统是一个实时性非常强的系统,如果其数据在网络不太好的情况下,有可能会出现丢包.数据延迟.数据堵塞等现象,出现这些 ...
- Ubuntu 入门安装
写在前面的话:很少一次上这么多干货,主要是对Linux的一些基本操作,常用的软件的安装,这个其实不算什么吧,方便大家也方便我,新手们早点入门Linux,少走弯路,网上资料很多,相当于一个整合咯,都是一 ...
- 深搜(DFS),回溯,Fire Net
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=2 解题报告: 这里的深搜有一点不同,就是,在深搜每一个点时,都要深搜每 ...
- 关于TOCTTOU攻击的简介
前言 最近看到了一些以 at 结尾的Linux系统调用,在维基百科上面说这可以防御一些特定的TOCTTOU攻击,而在TOCTTOU对应页面中并没有中文版的介绍,而且百度的结果也比较少,于是决定抽空写一 ...
- 【洛谷P3627】[APIO2009]抢掠计划
抢掠计划 题目链接 比较水的缩点模板题,Tarjan缩点,重新建图,记录联通块的钱数.是否有酒吧 DAG上记忆化搜索即可 #include<iostream> #include<cs ...
- HDU 1155 Bungee Jumping(物理题,动能公式,弹性势能公式,重力势能公式)
传送门: Bungee Jumping Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- WebClient设置Expect: 100-continue
今天使用WebClient进行post发送数据的时候.总是无响应.实在没办法了.只好用fiddler抓包看一看.自己构造请求看哪里有问题. 发现请求头加上这句话后就无响应了.Expect: 100-c ...
- ssd的BUG
苦恼了我一周,当然最近我有事老请假,也有原因.就是查不到我训练的SSD模型问题出在哪里,loss也在下降,但是跳动比较大.测试时,有些类效果还可以,但是有些类压根检测不出来.而根据我的经验,那些类大概 ...
- 数据库——MySQL——完整性约束
约束,就是用来保证数据完整性和一致性的. 常见的约束分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY (FK) 标识该字段为该表的外键 NO ...
- python之yield表达式
yield表达式用于generator function 调用generator function时,返回一个iterator(函数内语句不被会执行),调用iterator函数时,执行到yield表达 ...