SpringAOP
Posted 鸟随二月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringAOP相关的知识,希望对你有一定的参考价值。
在ideal中创建maven项目
一直点next知道finish完成项目创建
aop 简单使用
添加依赖
在SpringAOP\\pom.xml添加以下依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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>
com\\example\\demo\\controller\\UserController.java验证例子
package com.example.demo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/login")
public int login(String username,String password){
System.out.println("执行了 login 方法");
return 0;
}
@RequestMapping("/register")
public int register(String username,String password){
System.out.println("执行了 register 方法");
return 0;
}
public void methodAll(){
methodA();
methodB();
}
private void methodB() {
}
private void methodA() {
}
}
aop使用
com\\example\\demo\\pointcut\\UserPointcut.java
package com.example.demo.pointcut;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class UserPointcut {
// 1.定义切面的规则
@Pointcut("execution(* com.example.demo.controller.UserController.*(..))")
public void pointcut() {
}
// 2.添加通知
@Before("pointcut()")
public void doBefore() {
System.out.println("执行了前置通知");
}
@After("pointcut()")
public void doAfter() {
System.out.println("执行了后置通知");
}
@AfterReturning("pointcut()")
public void doReturing() {
System.out.println("执行了返回之前通知的方法");
}
@AfterThrowing("pointcut()")
public void doThrowing() {
System.out.println("执行了抛出异常之前通知方法");
}
@Around("pointcut()")
public Object doAround(ProceedingJoinPoint joinPoint) {
System.out.println("进入了环绕通知:方法执行之前");
Object result = 0;
try {
// 执行被代理的方法
result = joinPoint.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
System.out.println("执行环绕通知:执行了方法调用之后");
return result;
}
}
3运行即可
以上是关于SpringAOP的主要内容,如果未能解决你的问题,请参考以下文章
springAop 使用@Around,@After等注解时,代码运行两边的问题