目录
一、用切面做的是怎么声明切面的?(切面是怎么用的?)
- 定义切面类:使用@Aspect注解来表示类是一个切面,可以使用@Component注解或其他Spring的组件注解来让Spring容器管理这个类的实例。
- 定义切入点(Pointcut): 使用@Pointcut注解来定义一个切入点表达式,这个表达式描述了哪些方法将被拦截。
- 定义通知(Advice):通知是切面中的具体逻辑,它定义了当切入点匹配的方法被调用时,应该执行哪些操作。Spring AOP支持多种类型的通知,如前置通知(Before advice)、后置通知(After advice)、环绕通知(Around advice
- 配置Spring AOP:Spring配置文件或启动类启用AspectJ自动代理,pring Boot中,这通常是通过添加@EnableAspectJAutoProxy注解
二、切点是怎么定义的?
- execution:表示这是一个execution类型的切点表达式。
- 方法修饰符(可选):如public、private等,默认为任意修饰符。
- 返回类型模式:如void、int、java.util.List等,表示方法的返回类型。
- 声明类型模式(可选):如com.example.MyClass,表示方法所属的类。
- 方法名称模式:如myMethod、*Method等,表示方法名称。
- 参数模式:如(java.lang.String,int)、(..)表示任意参数等,表示方法的参数类型。
- 抛出异常模式(可选):如java.lang.Exception,表示方法抛出的异常类型。
三、说一下面向切面编程?
是一种编程范式(简称AOP),通过横切关注点的方式来解耦系统中的各个模块。
切面(Aspect):是横切关注点的实现,它是一个包含了横切关注点代码的模块
连接点(Joinpoint):是在程序执行过程中能够插入切面代码的点
切点(Pointcut):用于定义哪些连接点将被切面织入
通知(Advice):是切面的具体实现,它定义了切面在何时以何种方式织入到目标连接点上
织入(Weaving):是将切面代码与目标代码合并的过程
四、AOP是怎么实现的?
AOP的实现方式主要分为静态AOP和动态AOP两种:
静态AOP:在编译阶段对程序的需要增强的代码进行修改,从而生成静态的AOP代理类。这种方式的实现需要特殊的编译器支持,如AspectJ。
动态AOP:在运行时动态地为目标对象生成代理对象,并在代理对象中织入切面代码。这种方式的实现通常依赖于Java的动态代理机制或CGLIB等第三方库,如Spring AOP。
五、说一下动态代理?
是aop的实现方式, 分为jdk动态代理cglib
j dk必须实现接口,基于java反射,只代理接口,不代理类
cglib通过继承方式子类重写父类方法增强,cglib使用字节码创建代理对象,可以代理接口,也可以代理类
标签:定义,Spring,代理,切面,AOP,动态 From: https://blog.csdn.net/w12345ll/article/details/140190801