4.6 就业面试技巧与解析
学完本章内容,读者应对Spring AOP开发和实现有了基本了解,熟悉了代理模式的应用。下面对面试过程中可能出现的相关问题进行解析,更好地帮助读者学习。
4.6.1 面试技巧与解析(一)
面试官:你是如何理解Spring AOP的?
应聘者:
AOP一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑抽取出来并封装为一个可重用的模块,这个模块被命名为切面。AOP的使用有助于减少系统中的重复代码,降低模块间的耦合度,同时提高系统的可维护性,可用于权限认证、日志、事务处理。
AOP实现的关键在于代理模式,AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ,动态代理则以Spring AOP为代表。
(1)AspectJ是静态代理的增强。所谓静态代理,就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强,它会在编译阶段将AspectJ(切面)织入Java字节码中,运行的就是增强之后的AOP对象。
(2)Spring AOP使用的是动态代理。所谓的动态代理,就是AOP框架不会去修改字节码,而是每次运行时在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,在特定的切点做了增强处理,并回调原对象的方法。
4.6.2 面试技巧与解析(二)
面试官:AOP中的Aspect、Advice、Advice Arguments、Pointcut、JoinPoint分别是什么?
应聘者:
(1)Aspect:Aspect是一个实现交叉问题的类,例如事务管理。Aspect可以是配置的普通类,可以在Spring Bean配置文件中配置。Spring AspectJ支持使用@Aspect注解将类声明为Aspect。
(2)Advice:Advice是针对特定JoinPoint采取的操作。在编程方面,它们是在应用程序中达到具有匹配切点的特定JoinPoint时执行的方法。可以将Advice视为Spring拦截器或Servlet过滤器。
(3)Advice Arguments:可以在Advice方法中传递参数。我们可以在切点中使用args()表达式来应用与参数模式匹配的任何方法。如果使用它,那么需要在确定参数类型的Advice方法中使用相同的名称。
(4)Pointcut:Pointcut是与JoinPoint匹配的正则表达式,用于确定是否需要执行Advice。Pointcut使用与JoinPoint匹配的不同类型的表达式。Spring框架使用AspectJ Pointcut表达式语言来确定将应用通知方法的JoinPoint。
(5)JoinPoint:JoinPoint是应用程序中的特定点,例如方法执行、异常处理、更改对象变量值等。在Spring AOP中,JoinPoint始终是方法的执行器。