AOP 注解配置的简单入门
AOP 注解配置的简单入门
快速入门
基于注解的aop开发步骤:
- 创建目标接口和目标类(内部有切点)
- 创建切面类(内部有增强方法)
- 将目标类和切面类的对象创建权交给spring
- 在切面类中使用注解配置织入关系
- 在配置文件中开启组件扫描和AOP的自动代理
- 测试
public interface TargetInterface{
void save();
}
@Component("target")
public class Target implements TargetInterface{
public void save(){
System.out.println("save Running...");
}
}
@Component("myAsect")
@Aspect //表中MyAspect是一个切面类
public class MyAspect{
//配置前置增强
@Before(value="execution(* com.jotian.aop.*.*(..))")
public void before(){
System.out.println("----------前置增强方法--------")
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--组件扫描-->
<context:component-scan base-package="com.jotian.aop"/>
<!--aop自动代理-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-aop:xml")
public class AopText{
@Autowired
private TargetInterface target;
@Test
public void test1(){
target.save();
}
}
注解配置AOP详解
注解通知的类型
通知的配置语法:@通知注解(“切面表达式”)
名称 | 注解 | 说明 |
---|---|---|
前置通知 | @Before | 用于配置前置通知,指定增强的方法在切入点方法之前执行 |
后置通知 | @AfterReturning | 用于配置后置通知,指定增强的方法在切入点方法之后执行 |
环绕通知 | @Around | 用于配置环绕通知,指定增强的方法在切入点方法之前和之后都执行 |
异常抛出通知 | @AfterThrowing | 用于配置异常抛出通知,指定增强的方法在出现异常时执行 |
最终通知 | @After | 用于配置最终通知。无论增强方式执行是否有异常都会执行 |
切点表达式的抽取
同xml配置AOP一样,我们可以将切点表达式抽取。抽取方式是在切面内定义方法,在该方法上使用@Pointcut注解定义切点表达式,然后在在增强注解中进行引用。具体如下
@Component("myAspect")
@Aspect
public class MyAspect{
@Before("MyAspect.myPoint")
public void before(){
System.out.println("前置代码增强...")
}
@Pointcut("execution(* com.jotian.aop.*.*(..))")
public void pointcut(){
}
}
@AfterThrowing("MyAspect.pointcut()")
public void afterThrowing(){
System.out.println("异常抛出增强...")
}
@After("pointcut()")
public void after(){
System.out.println("最终增强...")
}
AOP知识要点
-
注解aop开发步骤
- 使用@Aspect标注切面类
- 使用@通知注解标注通知方法
- 在配置文件中配置aop自动代理< aop:aspectj-autoproxy/>
-
通知注解类型
名称 注解 说明 前置通知 @Before 用于配置前置通知。指定增强的方法在切入点方法之前执行 后置通知 @AfterReturning 用于配置后置通知。指定增强的方法在切入点方法之后执行 环绕通知 @Around 用于配置环绕通知。指定增强的方法在切入点方法之前和之后都执行 异常抛出通知 @AfterThrowing 用于配置异常抛出通知。指定增强的方法在出现异常时执行 最终通知 @After 用于配置最终通知,无论增强方式执行是否有异常都会执行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异