Spring面试题汇总

Spring框架

什么是Spring框架?

Spring是一种轻量级框架,旨在提高开发人员的开发效率以及系统的可维护性。

Spring框架有哪些主要模块?

spring-core

包含Spring框架基本的核心工具类,Spring其他组件都使用到这个包里的类,是其他组件的基本核心,当然也可以在自己的应用系统中使用这些工具类。

spring-bean

所有应用都要用到,它包含访问配置文件、创建和管理bean以及进行IOC/DI操作相关的所有类。如果应用只需要基本的IOC/DI支持,引入spring-core和spring-bean就可以。

spring-context

上下文。在core和bean基础上建立的,它提供一个框架式的对象访问方式,类似于一个JNDI(Java Naming and Directory Interface)注册表。上下文模块从Beans模块继承其功能,并添加支持国际化、事件传播、资源负载、并且透明创建上下文,例如Servlet容器。Context模块还支持Java EE的功能,如EJB、JMX和基本的远程处理。ApplicationContext接口是Context模块的焦点。

spring-context-indexer

上下文索引器,在编译时创建候选对象的静态列表,来提高大型应用程序的启动性能。

spring-context-support

支持整合普通第三方库到Spring应用程序上下文,特别是用于高速缓存(ehcache,JCache)和调度(CommonJ,Quartz)的支持。

spring-expression

<bean id="order001" class="com.zhangguo.spring.spel0.Order">

        <property name="customer" ref="gyl"></property>

        <property name="name" value="#{gyl.name}"></property>

        <property name="orderName" value='#{"Apples".toUpperCase()}'></property>

</bean>

支持SpEL表达式,#{gyl.name}作用是找到名称为gyl的bean取出中间的name值;#{"Apples".toUpperCase()}把字符串Apples转换成大写并输出。

AOP和Instrumentation

spring-aop

切面相关

spring-aspects

单独的spring-aspects模块,提供了与AspectJ的集成。

spring-instrument

Java类加载器(CLassLoader)。该spring-instrument-tomcat 模块包含了支持Tomcat的植入代理。

消息

spring-messaging

消息传递模块

数据访问/集成

spring-jdbc

包含对Spring对JDBC数据访问进行封装的所有类

spring-tx

实现类的编程和声明式事务管理。

编程式事务:使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

声明式事务:建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。

spring-orm

对象关系映射(object-relational mapping),包括JPA和Hibernate。使用spring-orm模块,您可以将这些O/R映射框架与Spring提供的所有其他功能结合使用,例如前面提到的简单声明性事务管理功能。

spring-oxm

对象xml映射(object-xml mapping),如JAXB,Castor,JiBX和XStream

spring-jms

java消息服务(Java Messaging Service) 包含用于生产和消费消息的功能,提供了与 spring-messaging模块的集成。

web

spring-web

提供基本的面向web的集成功能,例如多部分文件上传功能,以及初始化一个使用了Servlet侦听器和面向Web的应用程序上下文的IoC容器。它还包含一个HTTP客户端和Spring的远程支持的Web相关部分

spring-webmvc

也称Web-Servlet模块。包含Web应用程序的Spring模型-视图-控制器(MVC)和REST Web Services实现。Spring的MVC框架提供了业务代码和Web表单之间的清晰分离。

spring-websocket

 

spring-webflux

类似于Netty。包含了对反应式 HTTP、服务器推送事件和 WebSocket 的客户端和服务器端的支持。在服务器端,WebFlux 支持两种不同的编程模型:第一种是 Spring MVC 中使用的基于 Java 注解的方式;第二种是基于 Java 8 的 lambda 表达式的函数式编程模型。

测试

spring-test

支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试

配套组件

spring-framework-bom

统一版本管理,直接在pom.xml中配置,用于解决版本冲突。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.2.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
</dependency>

spring-jcl

Jakarta Commons Logging 日志模块

Spring框架中用到了哪些设计模式?

简单工厂、工厂方法、单例、适配器、包装器、代理、观察者、策略、模板方法

IOC控制反转

IOC控制反转,就是将原本手动在程序中创建对象的方式,交由Spring框架来管理。

当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。

 

AOP

对AOP的理解

AOP切面,与业务无关,把共用的部分封装起来(例如事务、日志、权限)

Spring AOP和AspectJ AOP

Spring AOP属于动态代理(运行时增强);AspectJ AOP属于静态代理(编译时增强)。

Spring的Bean

1)Spring中的bean的作用域?

singleton单例(默认):在整个应用中,只创建一个实例

prototype原型:每次注入时,都会创建一个新的bean

request请求:在web应用中,为每个请求创建一个bean实例

session会话:在web应用中,为每个会话创建一个bean实例

2)Spring中的单例bean的线程安全问题?

当多个线程对同一个对象的非静态成员变量的写操作时,存在安全问题

解决方案:在类中定义ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal中

3)Spring中bean的生命周期

SpringMVC

 

Spring事务

1)事务的4个特性、ACID

原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。

一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。

隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。

持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。

2)Spring事务管理的方式有几种?

编程式事务管理:将事务管理代码嵌入到业务方法中来控制事务的提交和回滚,在编程式事务中,必须在每个业务操作中包含额外的事务管理代码

声明式事务管理:以声明的方式来实现事务管理。事务管理作为一种横切关注点,可以通过AOP方法模块化。Spring通过Spring AOP框架支持声明式事务管理。

2)Spring事务中的隔离级别有哪几种?

3)Spring事务中有哪几种事务传播行为?

 

 

欢迎各位大神评论点赞!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术宅老谢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值