Springboot 实现 Spring AOP 操作

本文介绍了在Spring Boot Web工程中使用Spring AOP的步骤。首先创建Spring Boot Web工程并在pom文件引入Spring AOP相关包,接着创建切入目标代码和切面类,在启动类添加注解。还提到了处理方法参数时改造切面类和controller方法,最后给出测试的浏览器访问地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

步骤一:创建springboot web 工程
在这里插入图片描述
然后 pom 文件中引入 Spring AOP 相关包:

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-aop</artifactId>
</dependency>
<dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjweaver</artifactId>
</dependency> 

第二步: 创建切入目标代码,这里是创建 Controller

@RestController
public class HelloAopController {

	@RequestMapping("/hello")
	public String execute(String username,String passwd) {
		
		System.out.println("execute1.........." + username + ":" + passwd);
		return "Hello";
	}
	
	@RequestMapping("/hello2")
	public String execute2(String username,String passwd) {
		System.out.println("execute2.........." + username + ":" + passwd);
		return "Hello";
	}
}

步骤三:创建切面类

@Aspect
@Component
public class MyAspect{ 

	@Pointcut("execution(* com.example.demo.controller.*.execute(..))")
	public void execute() {}
	
	 @Before("execute()")
	public void beforeExecute(JoinPoint joinPoint) {
		String args = joinPoint.toString();
		Object[] objects = joinPoint.getArgs();
		for (Object object : objects) {
			System.out.println("object--- " + object.toString());
		}
		System.out.println("切面 beforeExecute ........." + args);
	}
	
	@After("execute()")
	public void afterExecute(JoinPoint joinPoint) {
		System.out.println("切面 afterExecute .........");
	}
}

注意点:

  1. 要添加 @Component,让该切面类再项目启动时加载为组件
  2. @Pointcut(“execution(* com.example.demo.controller..execute(…))")中的.execute是指com.example.demo.controller 包下的所有类 的 execute方法,只会对execute方法生效,当改为"execution(* com.example.demo.controller..(…))” 时,会对所有方法生效

步骤四: 在启动类上添加注解 @EnableAspectJAutoProxy

@EnableAspectJAutoProxy
@SpringBootApplication
public class SpringbootAop2Application {
	public static void main(String[] args) {
		SpringApplication.run(SpringbootAop2Application.class, args);
	}
}

可得到结果:
打开浏览器: http://localhost:8080/hello?username=LiMing&passwd=@LM.123@

object--- LiMing
object--- @LM.123@
切面 beforeExecute .........execution(String com.example.demo.controller.HelloAopController.execute(String,String))
execute1..........LiMing:@LM.123@
切面 afterExecute .........

=========================================
处理方法参数
改造 切面 类

@Aspect
@Component
public class MyAspect{ 

	@Pointcut("execution(* com.example.demo.controller.*.*(com.example.demo.domain.Login)) && args(login)")
	public void execute(Login login) {}
	
	 @Before("execute(login)")
	public void beforeExecute(Login login) {
		
		System.out.println("切 - 执行前 ........." + login.toString());
	}
	
	@After("execute(login)")
	public void afterExecute(Login login) {
		System.out.println("切 - 执行后 .........");
	}
}

Login.java

public class Login {

	private String userName = "LiMing";
	private String passwd="@LM.123@";
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPasswd() {
		return passwd;
	}
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}
	@Override
	public String toString() {
		return "Login [userName=" + userName + ", passwd=" + passwd + "]";
	}
}

改造 controller 方法

@RestController
public class HelloAopController {

	@RequestMapping("/hello")
	public String execute(Login login) {
		System.out.println("execute.........." + login.toString());
		return "Hello";
	}
}

可得到结果:
浏览器: http://localhost:8080/hello

切 - 执行前 .........Login [userName=LiMing, passwd=@LM.123@]
execute..........Login [userName=LiMing, passwd=@LM.123@]
切 - 执行后 .........
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值