Spring Boot AOP Demo

什么是AOP?

AOP面向切面,切面将那些与业务无关,却被业务模块共同调用的逻辑提取并封装起来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

实现策略JAVA SE动态代理

CGLib

相关注解

@Aspect(方面)

@Pointcut(切入点)

@Before(之前)

@After(之后)

pom.xml

<!--引用AOP-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
AspectTest.class
/**
 * @author 张东明
 * @TODO: 2019/3/4
 * @remark AOP切面类 日志记录
 */
@Aspect
@Component
public class AspectTest {

    private final static Logger logger = LoggerFactory.getLogger(AspectTest.class);

    @Autowired
    private GeLogVisitServiceImpl geLogVisitService;

    @Pointcut("execution(public * com.nf147.platform.web..*.*(..))")
    public void controllerMethod() {

    }

    @Before("controllerMethod()")
    public void LogRequestInfo(JoinPoint joinPoint) throws JsonProcessingException {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        /**
         * 获取Session
         * */
        GeEnterprise user = (GeEnterprise) request.getSession().getAttribute("user");

        int id = 0;
        if (user != null) {
            id = user.getId();
        }
        String remoteAddr = request.getRemoteAddr();
        String requestURI = request.getRequestURI();

        if (remoteAddr != null && requestURI != null) {
            GeLogVisit geLogVisit = null;
            if (id > 0) {
                geLogVisit = new GeLogVisit(id, remoteAddr, requestURI, new Date(), 1);
            } else {
                geLogVisit = new GeLogVisit(remoteAddr, requestURI, new Date(), 1);
            }
            System.out.println("日志记录信息:" + geLogVisit.toString());
            int insert = geLogVisitService.insert(geLogVisit);
            System.out.println(insert);
        }

        StringBuffer requestLog = new StringBuffer();
        requestLog.append("请求信息:")
                .append("URL = {" + requestURI + "},\t")
                .append("HTTP_METHOD = {" + request.getMethod() + "},\t")
                .append("IP = {" + remoteAddr + "},\t")
                .append("CLASS_METHOD = {" + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName() + "},\t");

        if (joinPoint.getArgs().length == 0) {
            requestLog.append("ARGS = {} ");
        } else {
            requestLog.append("ARGS = " + new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL)
                    .writeValueAsString(joinPoint.getArgs()[0]) + "");
        }
        System.out.println(requestLog.toString());
    }

    /**
     * @remark 调用之后回归返回结果
     * // TODO: 2019/3/4
     */
    @AfterReturning(returning = "resultVO", pointcut = "controllerMethod()")
    public void logResultVOInfo(JSONResponse resultVO) throws Exception {
        System.out.println("请求结果:" + resultVO.getCode() + "\t" + resultVO.getData());
    }

}

原文地址:https://www.cnblogs.com/dzcici/p/10472806.html

时间: 2024-08-30 10:21:15

Spring Boot AOP Demo的相关文章

Spring Boot AOP解析

Spring Boot AOP 面向切面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP). OOP中模块化的关键单元是类,而在AOP中,模块化单元是方面. AOP(Aspect Oriented Program) 面向切面编程 在面向切面编程的思想里面,把功能分为核心业务功能和周边功能. 核心业务,比如登陆,增加数据,删除数据都叫核心业务 周边功能,比如性能统计,日志,事务管理等等 周边功能在 Spring Boot 的面向切面编程AOP思想里,即被定义为切面 在面向切

Spring Boot AOP之对请求的参数入参与返回结果进行拦截处理

Spring Boot AOP之对请求的参数入参与返回结果进行拦截处理 本文链接:https://blog.csdn.net/puhaiyang/article/details/78146620 本文链接:https://blog.csdn.net/puhaiyang/article/details/78146620 spring Aop切面中的@Before @Around等执行顺序与请求参数统一解码 https://www.cnblogs.com/newAndHui/p/11771035.h

spring boot aop打印http请求回复日志包含请求体

一.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>

[Spring Boot ] Creating the Spring Boot Project : Demo: Creating a REST Controller

In Spring boot, define a REST API endpoint is pretty easy. package com.globomatisc.bike.controllers; import java.util.ArrayList; import java.util.List; import com.globomatisc.bike.models.Bike; import org.springframework.http.HttpStatus; import org.sp

spring cloud zipkin sleuth与spring boot aop结合后,启动慢

问题描述: 引入了spring cloud的监控starter,间接引入jooq. 又引入了 spring-boot-starter-web,所以间接引入aop. 参考下面资料后:https://github.com/jOOQ/jOOQ/issues/5902 发现可以通过修改aop表达式解决. 于是修改aop表达式如下: 问题解决. 原文地址:https://www.cnblogs.com/grey-wolf/p/8296026.html

Spring Boot AOP 简易操作日志管理

AOP (Aspect Oriented Programming) 面向切面编程. 业务有核心业务和边缘业务. 比如用户管理,菜单管理,权限管理,这些都属于核心业务. 比如日志管理,操作记录管理,这些都是边缘业务,可以统一的提出来. 尝试使用SpringBoot +AOP 提出操作记录业务. github aop_demo package com.lick.aspect.lang.annotation; import com.lick.aspect.lang.enums.BusinessType

spring boot aop日志管理(MongoDB)

aop拦截的是controller层请求,正常的请求用@Before来拦截, 异常的请求用@AfterThrowing来拦截 1.引用aop jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.0.3.RELEASE</version>

spring boot aop

这里要做就是利用aop 来打印请求的日志,返回结果,简单的异常处理 一:使用@Aspect注解创建切面,类名是 RquestAspect import javax.servlet.http.HttpServletRequest; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.as

spring boot pom demo

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersi