基于注解的 AOP 开发
【摘要】 1. 快速入门 2. 注解配置 AOP 详解 2.1 注解通知的类型 2.2 切点表达式的抽取 3. 知识要点 1. 快速入门基于注解的aop开发步骤:创建目标接口和目标类(内部有切点),将目标类的对象创建权交给 springpublic interface TargetInterface { public void save();}@Component("target")publi...
1. 快速入门
- 基于注解的aop开发步骤:
- 创建目标接口和目标类(内部有切点),将目标类的对象创建权交给 spring
public interface TargetInterface {
public void save();
}
@Component("target")
public class Target implements TargetInterface {
@Override
public void save() {
System.out.println("save running...");
}
}
- 创建切面类(内部有增强方法),将切面类的对象创建权交给 spring,在切面类中使用注解配置织入关系
@Component("myAspect")
@Aspect //标注当前myAspect是一个切面类
public class MyAspect {
//配置前置增强
@Before("execution(* com.xdr630.anno.*.*(..))")
public void before() {
System.out.println("前置增强...");
}
public void afterReturning() {
System.out.println("后置增强...");
}
public Object around(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("环绕前增强...");
Object proceed = pjp.proceed();
System.out.println("环绕后增强...");
return proceed;
}
public void after() {
System.out.println("最终增强...");
}
}
- 在配置文件中开启组件扫描和 AOP 的自动代理
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<!--开启组件扫描-->
<context:component-scan base-package="com.xdr630.anno"/>
<!--aop自动代理-->
<aop:aspectj-autoproxy/>
</beans>
- 测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-anno.xml")
public class AnnoTest {
@Autowired
private TargetInterface target;
@Test
public void test1() {
target.save();
}
}
2. 注解配置 AOP 详解
2.1 注解通知的类型
- 通知的配置语法:
@通知注解(“切点表达式")
2.2 切点表达式的抽取
- 同 xml 配置 aop 一样,可以将切点表达式抽取。抽取方式是在切面内定义方法,在该方法上使用
@Pointcut
注解定义切点表达式,然后在在增强注解中进行引用。具体如下:
@Component("myAspect")
@Aspect //标注当前myAspect是一个切面类
public class MyAspect {
//可以直接引用
@Before("myPoint()")
public void before() {
System.out.println("前置增强...");
}
//也可以使用 类名.方法() 的形式
@AfterReturning("MyAspect.myPoint()")
public void afterReturning() {
System.out.println("后置增强...");
}
@Around("myPoint()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("环绕前增强...");
Object proceed = pjp.proceed();
System.out.println("环绕后增强...");
return proceed;
}
@After("myPoint()")
public void after() {
System.out.println("最终增强...");
}
//定义的切点方法
@Pointcut("execution(* com.xdr630.anno.*.*(..))")
public void myPoint() {
}
}
3. 知识要点
- 注解aop开发步骤
- 使用@Aspect标注切面类
- 使用@通知注解标注通知方法
- 在配置文件中配置aop自动代理
<aop:aspectj-autoproxy/>
- 通知注解类型
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)