Spring Boot整合Aop

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实现代码

测试:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容