SpringBoot通过3种方式实现AOP切面
在Spring Boot中,可以通过以下三种方式实现AOP切面:
- 使用注解(@Aspect)创建切面类
- 通过XML配置文件配置切面
- 使用Bean配置方式
以下是具体实现的代码示例:
- 使用注解(@Aspect)创建切面类:
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class MyAspect {
@Pointcut("execution(* com.example.service.*.*(..))")
public void serviceLayerMethods() {
}
@Before("serviceLayerMethods()")
public void beforeAdvice() {
System.out.println("Before advice");
}
}
- 通过XML配置文件配置切面:
<!-- aop.xml -->
<aspectj>
<aspects>
<aspect name="com.example.MyAspect" />
</aspects>
<weaver options="-Xlint:ignore">
<include within="com.example.service.*.*(..)" />
</weaver>
</aspectj>
- 使用Bean配置方式:
import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AopConfig {
@Bean
public MyAspect myAspect() {
return new MyAspect();
}
@Bean
public BeanNameAutoProxyCreator beanNameAutoProxyCreator() {
BeanNameAutoProxyCreator proxyCreator = new BeanNameAutoProxyCreator();
proxyCreator.setBeanNames("*Service");
proxyCreator.setInterceptorNames("myAspect");
return proxyCreator;
}
}
在这些示例中,MyAspect类是一个普通的POJO,使用@Aspect注解标记,并且通过@Component注解被Spring容器识别。@Pointcut注解定义了一个切点,即哪些方法会被AOP切面拦截。@Before注解表示在切点方法执行前执行一段逻辑。
XML配置方式和Bean配置方式都是配置Spring AOP的,只是配置的方式不同,最终目的都是一样的,即定义一个切面,并在指定的切点执行通知。
评论已关闭