interview
spring
SpringAOP默认用的是什么动态代理,两者的区别?

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应用的位置。

用途

面试这个内容是为了评估候选人对Spring AOP的理解和掌握程度。Spring AOP在实际生产环境中常用于实现横切关注点,如日志记录、事务管理、安全检查等。通过AOP可以在不修改业务代码的情况下,实现这些功能,从而提高代码的可维护性和可重用性。\n

相关问题

🦆
什么是横切关注点?

横切关注点是指那些在多个模块中都会涉及的功能,如日志记录、事务管理、权限控制等。这些功能通常独立于核心业务逻辑,但又需要在多个地方重复实现。AOP可以将这些横切关注点从业务逻辑中分离出来,通过切面进行统一管理。

🦆
Spring AOP与AspectJ AOP的区别是什么?

Spring AOP是一种基于代理的AOP实现,主要用于Spring框架的应用中,支持运行时织入。AspectJ是一个功能更强大的AOP框架,支持编译时织入和加载时织入。AspectJ提供了更丰富的切点表达式和更强大的功能,但使用和配置相对复杂。

🦆
如何在Spring Boot中启用AOP?

在Spring Boot中启用AOP非常简单,只需要在配置类上添加@EnableAspectJAutoProxy注解,Spring Boot会自动扫描并注册所有带有@Aspect注解的切面类。

🦆
什么是连接点Join Point?

连接点是指程序执行过程中的一个特定点,例如方法调用、异常抛出等。AOP通过Advice在特定的连接点进行切入,执行额外的逻辑。

🦆
什么是织入Weaving?

织入是将切面代码应用到目标对象上的过程,可以在编译时、类加载时或运行时进行。Spring AOP主要使用运行时织入,通过动态代理或CGLIB实现。