spring常用知识点

1、拦截器和过滤器区别

  1. 原理不同:

拦截器是基于java的反射机制,而过滤器采用责任链模式是基于函数回调的。

  1. 使用范围不同:

过滤器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。

相关推荐
轻浮j2 分钟前
Sentinel底层原理以及使用算法
java·算法·sentinel
it噩梦2 分钟前
springboot 工程使用proguard混淆
java·spring boot·后端
潜意识起点5 分钟前
Java数组:静态初始化与动态初始化详解
java·开发语言·python
竹影卿心7 分钟前
Java连接HANA数据库
java·数据库·windows
Abelard_17 分钟前
LeetCode--347.前k个高频元素(使用优先队列解决)
java·算法·leetcode
海海不掉头发33 分钟前
软件工程-【软件项目管理】--期末复习题汇总
java·学习·产品运营·软件工程·团队开发·需求分析·期末复习
缘友一世36 分钟前
java实现网络IO高并发编程java AIO
java·网络·python
m0_7482463539 分钟前
Spring Web MVC:功能端点(Functional Endpoints)
前端·spring·mvc
CodeClimb40 分钟前
【华为OD-E卷 - 猜字谜100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
ADRU1 小时前
设计模式-责任链模式
java·设计模式·责任链模式