在springboot中使用aop
时间: 2024-02-09 14:09:29 浏览: 196
解决springboot的aop切面不起作用问题(失效的排查)
在Spring Boot中使用AOP的步骤如下:
1. 定义切面
在Spring Boot中,可以使用`@Aspect`注解定义切面类。例如:
```java
@Aspect
@Component
public class MyAspect {
@Before("execution(* com.example.demo.service.UserService.*(..))")
public void beforeMethod(JoinPoint joinPoint) {
System.out.println("方法执行前:" + joinPoint.getSignature().getName());
}
@After("execution(* com.example.demo.service.UserService.*(..))")
public void afterMethod(JoinPoint joinPoint) {
System.out.println("方法执行后:" + joinPoint.getSignature().getName());
}
}
```
在上面的示例中,我们定义了一个名为`MyAspect`的切面类,并使用`@Before`和`@After`注解定义了两个方法。这两个方法分别在目标方法执行前和执行后输出日志。`execution(* com.example.demo.service.UserService.*(..))`表示拦截`com.example.demo.service.UserService`类中的所有方法。
2. 启用AOP
在启动类上添加`@EnableAspectJAutoProxy`注解,启用AOP功能。例如:
```java
@SpringBootApplication
@EnableAspectJAutoProxy
public class MyApp {
// ...
}
```
3. 在目标方法上使用注解
在需要拦截的方法上添加注解。例如:
```java
@Service
public class UserService {
@MyAnnotation
public void addUser(User user) {
// ...
}
public void deleteUser(int id) {
// ...
}
}
```
在上面的示例中,我们在`addUser()`方法上添加了`@MyAnnotation`注解,表示该方法需要被拦截。而`deleteUser()`方法没有被添加注解,不会被拦截。
当程序运行时,如果调用了带有`@MyAnnotation`注解的方法,切面中定义的`beforeMethod()`方法和`afterMethod()`方法就会被执行,输出相应的日志。
需要注意的是,切面类和注解都应该被扫描到。可以使用`@ComponentScan`注解指定需要扫描的包。例如:
```java
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.demo.aspect", "com.example.demo.service"})
@EnableAspectJAutoProxy
public class MyApp {
// ...
}
```
这样,Spring Boot就会自动扫描`com.example.demo.aspect`和`com.example.demo.service`两个包下的类,并将其应用到目标方法上。
阅读全文