出2个spring aop 资深面试题
时间: 2024-01-11 12:12:12 浏览: 69
1. 请说明Spring AOP的实现原理,并举例说明在AOP中如何实现事务管理?
答:Spring AOP基于动态代理实现,通过运行时生成代理对象,将切面织入到目标对象的方法调用中。Spring AOP支持两种代理方式:JDK动态代理和CGLIB动态代理。JDK动态代理适用于实现了接口的类,而CGLIB动态代理则适用于没有实现接口的类。
对于事务管理,Spring AOP通过Around Advice实现。在方法调用前后加入事务的开启和提交操作,如果方法执行过程中出现异常,则回滚事务。在Spring中,可以使用TransactionInterceptor作为事务管理器,将其配置为Around Advice,实现对事务的统一管理。
2. 请说明Spring AOP中的Pointcut和Joinpoint的概念,并举例说明如何定义Pointcut和Joinpoint?
答:在Spring AOP中,Pointcut是一种特殊的表达式,表示要对哪些方法进行拦截。Joinpoint则是匹配Pointcut的方法执行时的具体位置,在Joinpoint上可以执行Advice。例如,在方法执行前或执行后执行一些操作,就是通过Advice实现的。
可以通过AspectJ表达式定义Pointcut和Joinpoint。AspectJ表达式分为两种:基于方法的表达式和基于类型的表达式。基于方法的表达式可以用来匹配指定的方法,而基于类型的表达式可以用来匹配指定的类或接口。
例如,可以使用基于方法的表达式“execution(* com.example.demo.service.*.*(..))”来匹配com.example.demo.service包下的所有方法。而使用基于类型的表达式“within(com.example.demo.service.*)”可以匹配com.example.demo.service包下的所有类。
阅读全文