1、拦截器和过滤器区别
1. 原理不同:
拦截器是基于java的反射机制,而过滤器采用责任链模式是基于函数回调的。
2. 使用范围不同:
过滤器Filter的使用依赖于Tomcat等容器,导致它只能在web程序中使用
拦截器是一个Sping组件,由Spring管理,不依赖于Tomcat容器,是可以单独使用的。也可以应用于Application、Swing容器中。
3.执行顺序不同:
先过滤器后拦截器
4.注入Bean情况不同:
拦截器加载的时间点在springcontext之前,而Bean又是由spring进行管理。
在注册拦截器之前,先将Interceptor 手动进行注入
2、什么是AOP? 有哪些AOP的概念?
AOP(Aspect-Oriented Programming)是一种编程思想,它通过将应用程序分解成多个切面,来实现对应用程序进行横向切割的目的,从而实现代码的复用和系统的解耦。
AOP的核心思想是将与业务逻辑无关的代码,如日志、事务、异常处理等,从业务逻辑代码中分离出来,形成独立的模块,以便于复用和维护。
AOP的一些概念如下:
切面(Aspect):切面是一个模块化的横切关注点,它通过对某个点进行拦截,来实现对目标对象的增强。
连接点(Join Point):连接点是在应用程序执行过程中能够插入切面的点,例如方法调用或异常处理等。
切入点(Pointcut):切入点是一组连接点的集合,它定义了在哪些连接点处应用切面。
通知(Advice):通知是切面在连接点上执行的操作,例如在方法调用前、方法调用后、方法返回时或方法抛出异常时执行的操作。
织入(Weaving):织入是将切面应用到目标对象并创建新的代理对象的过程。织入可以在编译时、类加载时或运行时进行。
目标对象(Target Object):目标对象是应用程序中需要被增强的对象。
代理对象(Proxy Object):代理对象是一个中间件对象,它拦截对目标对象的访问并调用切面提供的通知。
通过AOP的概念,我们可以将应用程序按照不同的横向关注点进行切割,并将与业务逻辑无关的代码分离出来,从而提高应用程序的可维护性和可扩展性。常见的AOP框架有Spring AOP和AspectJ。
3、AOP 有哪些应用场景?
AOP(Aspect-Oriented Programming)可以在许多场景下被应用。以下是一些AOP的应用场景:
日志记录:在方法调用前后记录日志,用于排查错误和分析系统性能。
安全性控制:控制用户对系统中某些资源或方法的访问权限,确保系统安全。
事务管理:在方法调用前后开启、提交或回滚事务,确保数据的一致性和完整性。
缓存管理:通过在方法调用前检查缓存中是否有目标对象的缓存结果,减少系统的响应时间和网络开销。
性能监控:记录方法调用的时间、次数和异常等信息,以便于分析系统性能。
异常处理:在方法调用过程中捕获异常并记录或通知开发人员,以便于及时处理异常情况。
数据验证:在方法调用前对输入参数进行验证,确保输入数据的正确性和合法性。
代码复用:将与业务逻辑无关的代码抽离出来,以便于复用和维护。
4、Bean Factory和ApplicationContext有什么区别?
Bean Factory和ApplicationContext都是Spring框架中负责管理Bean的容器,但是它们之间有一些区别:
Bean Factory是Spring框架的基础设施,提供了最基本的IOC功能,而ApplicationContext是Bean Factory的超集,包含了Bean Factory的所有功能,并且还提供了更多的企业级特性,如事件传播、国际化、AOP等。
在实现上,ApplicationContext是Bean Factory的扩展,ApplicationContext除了提供了Bean Factory的所有功能之外,还提供了更多的功能,例如:资源管理、事件发布等等。
一般来说,Bean Factory适用于轻量级应用,而ApplicationContext则适用于大型企业应用,因为ApplicationContext提供了更多的企业级特性和功能,例如:事务管理、远程访问、JNDI访问等等。
ApplicationContext在启动时就实例化所有的单例Bean,而Bean Factory是在获取Bean时才进行实例化。
总之,ApplicationContext是Bean Factory的超集,提供了更多的企业级特性和功能,一般情况下我们优先使用ApplicationContext。