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。

相关推荐
曹牧2 小时前
文档格式:OFD
java
豆角焖肉2 小时前
Maven进阶与搭建私服
java·maven
空中湖2 小时前
Spring AI Agent 编排:ReAct 模式 + 多 Agent 协作实战
人工智能·spring·react.js
大不点wow3 小时前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
止语Lab3 小时前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活3 小时前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
噢,我明白了3 小时前
Java中日期和字符串的处理
java·开发语言·日期
程序员天天困3 小时前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn3 小时前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
dkbnull3 小时前
Spring Boot请求处理组件对比详解
java·spring boot