Spring面试题, Spring AOP默认用的是什么动态代理,两者的区别?
Spring面试题, Spring AOP默认用的是什么动态代理,两者的区别?
QA
Step 1
Q:: Spring AOP默认用的是什么动态代理?
A:: Spring AOP默认使用JDK动态代理和CGLIB代理。如果目标对象实现了接口,Spring AOP会默认选择JDK动态代理;如果目标对象没有实现接口,则使用CGLIB代理。
Step 2
Q:: JDK动态代理和CGLIB代理的区别是什么?
A:: JDK动态代理只能代理实现了接口的类,而CGLIB代理则是通过生成目标类的子类来实现代理,因此它可以代理没有接口的类。JDK动态代理在运行时创建代理类,效率较高,但功能有限;CGLIB通过字节码生成,创建代理类时开销较大,但能够代理所有类。
Step 3
Q:: Spring AOP中的Advice有哪些类型?
A:: Spring AOP中的Advice包括Before Advice、After Advice、AfterReturning Advice、AfterThrowing Advice和Around Advice。Before Advice在方法执行之前执行,After Advice在方法执行之后执行,AfterReturning Advice在方法成功返回之后执行,AfterThrowing Advice在方法抛出异常之后执行,Around Advice环绕目标方法执行,可以控制方法的执行前后。
Step 4
Q:: 什么是Pointcut?
A:: Pointcut是AOP的一个核心概念,用于定义Advice应用的连接点。它通过表达式来匹配特定的连接点,例如特定的方法、特定的注解等,从而决定Advice应用的位置。
Step 5
Q:: 如何定义一个Spring AOP的Aspect?
A:: 一个Spring AOP的Aspect是通过@Aspect注解来定义的,它可以包含多个Advice方法。每个Advice方法通过@Before、@After、@AfterReturning、@AfterThrowing、@
Around等注解来标识,并配合Pointcut表达式来指定Advice应用的位置。