springboot 中运用切面aop

11 篇文章 1 订阅
1 篇文章 0 订阅

1、在pom.xml中引用spring-boot-starter-aop依赖

 

2、创建HttpAspect.java类,加上@Aspect注解
@Poincut注解表示切入的点,即程序中通用的逻辑业务,这里是请求的路径

@Before注解表示当前方法是在具体的请求方法之前执行

@After注解表示当前方法是在具体的请求方法之后 执行

@AfterReturning注解可以得到请求的参数

 

package com.example.aspect;
 
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.JoinPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
 
import javax.servlet.http.HttpServletRequest;
 
/**
 * 利用AOP技术对往数据库中插入学生信息作权限验证
 */
 
@Aspect
@Component
public class HttpAspect {
 
    private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
 
    //@Before的注解在方法执行之前执行
    //拦截该路径下studentList()方法,两个点表示任何参数
//    @Before("execution(public * com.example.controller.StudentController.studentList(..))")
//    public void log(){
//        System.out.println("Test before");
//    }
//
//    @After("execution(public * com.example.controller.StudentController.studentList(..))")
//    public void doAfter(){
//        System.out.println("Test after");
//    }
 
    //定义一个公用方法
    @Pointcut("execution(public * com.example.controller.StudentController.*(..))")
    public void log(){
    }
 
    @Before("log()")
    public void doBefore(JoinPoint joinPoint){
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
 
        //url
        logger.info("url={}", request.getRequestURI());
 
        //method
        logger.info("method={}", request.getMethod());
 
        //ip
        logger.info("ip={}", request.getRemoteAddr());
 
        //method
        logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
 
        //param
        logger.info("args={}", joinPoint.getArgs());
    }
 
    @After("log()")
    public void doAfter(){
    }
 
    @AfterReturning(returning="obj", pointcut = "log()")
    public void doAfterReturnig(Object obj){
        logger.info("reponse={}", obj);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个流行的开源框架,它简化了构建基于Spring的应用程序的过程。学会Spring Boot意味着掌握以下几个关键点: 1. **配置管理**:理解如何创建`@SpringBootApplication`注解的@Configuration、@Component和@EnableAutoConfiguration,它们自动配置了许多常见的组件。 2. **依赖注入**:熟悉@Autowired注解,用于依赖注入bean到其他类的方法或字段,提高模块间的松耦合。 3. **启动器启动流程**:了解启动器的生命周期,包括`main`函数、ApplicationRunner或 CommandLineRunner等回调机制。 4. **RESTful API**:学会使用@RestController、@RequestMapping等注解快速创建RESTful服务,并能处理HTTP请求和响应。 5. **数据库操作**:通过JdbcTemplate、Repository或者JPA等技术操作数据源,执行CRUD操作。 6. **文件上传和下载**:处理multipart/form-data类型的请求,以及如何配置MultipartFile。 7. **AOP切面编程**:利用AspectJ或Spring AOP处理横切关注点,如日志记录、事务管理等。 8. **Spring Cloud**:理解和运用Spring Boot与Spring Cloud集成,进行微服务架构的部署和管理。 9. **错误处理和异常映射**:配置全局异常处理器,自定义异常消息和状态码。 10. **测试**:使用Spring Boot提供的测试工具如MockMvc做单元测试和集成测试。 要真正会Spring Boot,还需要不断实践项目,并熟悉其生态系统和常用的最佳实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值