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. Smart template的控件能否当成普通控件来用

    我的同事问过我这个问题: 只要弄清楚Smart control的原理,就能回答这个问题. 答案是: smart control可以像普通的控件一样在xml view中被定义和使用,但是必须结合ODat ...

  2. 【转载】#438 - Benefits of Using Interfaces

    You might wonder why you'd define an interface, have a class implement that interface and then acces ...

  3. C语言 字符串处理函数

    #include <stdio.h> #include <string.h> // strlen void test() { // 测量字符串常量的字符长度(不包括\0这个字符 ...

  4. mydumper安装和使用

    安装下载安装包:wget https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz 安装依赖包:yum inst ...

  5. C++11之std::future和std::promise和std::std::packaged_task

    为什么C++11引入std::future和std::promise?C++11创建了线程以后,我们不能直接从thread.join()得到结果,必须定义一个变量,在线程执行时,对这个变量赋值,然后执 ...

  6. MYSQL5.7.15安装步骤

    下载完成之后双击安装: 接下来一路next (出现的问题) 在我第一次安装myslq过程中,上图中的mysql server failed ,这是因为电脑环境需要升级一个插件,Visual C++ 2 ...

  7. ListView与SimpleAdapter

    Adapter可以视作控件与数据之间的桥梁 对ListView做自由布局和填充需要使用到Adapter,这里我们采用SimpleAdapter. 简单来说: 1.定义一个ListItem,其数据结构是 ...

  8. android imageview使用的时候 引用资源src和background的区别

    android imageview使用的时候 引用资源时src和background的区别 src更强调内容并且不行拉伸图片进行适配,而background更注重引用图片,会对图片进行拉伸

  9. 9.Element-ui的校验规则Rules

    Element-ui的校验规则Rules <el-form label-position="left" label-width="80px" :model ...

  10. java8新特性学习1

    java8增加了不少新特性,下面就一些常见的新特性进行学习... 1.接口中的方法 2.函数式接口 3.Lambda表达式 4.java8内置的四大核心函数式接口 5.方法引用和构造器引用 6.Str ...