目录
16.1 AspectJ框架【AOP框架】
16.2 使用AspectJ步骤
16.3 Spring中AOP概述
16.4 Spring中AOP相关术语
第十七章 AspectJ详解【重点】
17.1 AspectJ中切入点表达式
17.2 AspectJ中JoinPoint对象
17.3 AspectJ中通知
17.4 定义切面优先级
17.5 基于XML方式配置AOP
16.1 AspectJ框架【AOP框架】
-
AspectJ是Java社区里最完整最流行的AOP框架。
-
在Spring2.0以上版本中,可以使用基于AspectJ注解或基于XML配置的AOP。
16.2 使用AspectJ步骤
-
添加jar包支持
<!-- 添加AspectJ--> <!-- spirng-aspects的jar包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.3.1</version> </dependency>
-
配置文件
-
开启组件扫描
-
开启AspectJ注解支持
<!-- 开启组件扫描--> <context:component-scan base-package="com.haogu"></context:component-scan> <!-- 开启AspectJ注解支持--> <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
-
-
将MyLogging类上面添加注解
-
@Component:将当前类标识为一个组件
-
@Aspect:将当前类标识为切面类【非核心业务提取类】
-
-
将MyLogging中的方法中添加通知注解
-
@Before
/*** @author Lee* @create 2022/3/28 16:03*/ @Component //将当前类标识为一个组件 @Aspect //将当前类标识为【切面类】【非核心业务提取类】 public class MyLogging { /** * 方法之前 */ @Before(value = "execution(public int com.haogu.controller.HelloController.add(int, int) )") public void beforeMethod(JoinPoint joinPoint){ //获取方法名称 String methodName = joinPoint.getSignature().getName(); //获取参数 Object[] args = joinPoint.getArgs(); System.out.println("==>Calc中"+methodName+"方法(),参数:"+ Arrays.toString(args)); } }
-
-
测试
public void testAop(){ //创建容器对象 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext_aop.xml"); HelloController hello = context.getBean(HelloController.class); int add = calc.add(1, 2); }
16.3 Spring中AOP概述
-
AOP:Aspect-Oriented Programming,面向切面编程【面向对象一种补充】
-
优势:
-
解决代码分散问题
-
解决代码混乱问题
-
-
-
OOP:Object-Oriented Programming,面向对象编程
16.4 Spring中AOP相关术语
-
横切