美文网首页
Spring Boot整合Aop

Spring Boot整合Aop

作者: whynotybb | 来源:发表于2019-06-15 16:05 被阅读0次

1,新建SpringBoot工程导入一下依赖:

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

  <dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-aop</artifactId>

</dependency>

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjrt</artifactId>

</dependency>

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

</dependency>

<dependency>

<groupId>cglib</groupId>

<artifactId>cglib</artifactId>

<version>2.1</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aop</artifactId>

</dependency>

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<optional>true</optional>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

</dependencies>

-------------------------------------------------------------------------------------

一个简单的web接口 结果

3,定义切面

@Aspect

@Component

public class WebLogAspect {

private Loggerlogger = LoggerFactory.getLogger(WebLogAspect.class);

//定义切面

    @Pointcut("execution(public * com.example.demo.log.*.*(..))")

public void webLog(){}

@Before("webLog()")

public void doBefore(JoinPoint joinPoint){

//获取请求信息

        ServletRequestAttributes servletRequestAttributes= (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

HttpServletRequest request= servletRequestAttributes.getRequest();

//记录日志

        logger.info("URL:"+request.getRequestURL().toString());

logger.info("METHOD"+request.getMethod());

logger.info("IP:"+request.getRemoteAddr());

}

@AfterReturning(returning ="ret",pointcut ="webLog()")

public void doAfterReturning(Object ret){

logger.info("response:"+ret);

}

}

1,定义切面需加注解@Aspect,@Component是交给Spring IOC容器托管。

2,  @Pointcut("execution(public * com.example.demo.log.*.*(..))"),定义了一个切面,参数是pointcut expression。public是修饰符,*是返回值 com...是包名+类名+方法名。

Spring AOP Advice共有五种类型:

@After ,@Before,@AfterReturning,@AfterThrowing,@Around

实例:利用AOP解耦应用程序。

Spring AOP实例

包租婆的核心业务只有签合同与收房租,其余可以交给中介商去做。

包租婆类的代码·如下:

中介商可以完美使用AOP实现。代码如下图:Aspect=PointCut+Advice

pointcut定义在哪里切入 前置通知与后置通知实现何时切入

使用环绕通知实现

@Around实现代码

测试:

相关文章

网友评论

      本文标题:Spring Boot整合Aop

      本文链接:https://www.haomeiwen.com/subject/qbtbfctx.html