Spring面试题一

1.Spring框架的基本理解

关键字:核心思想IOC/AOP、作用(解耦、简化),简单描述框架组成

        Spring框架是一款轻量级的开发框架,核心思想是IOC (控制反转)和AOP(面向切面编程),为Java应用程序开发提供组件管理服务,用于组件之间的解耦,以及简化第三方JavaEE中间件技术的使用(JMS、任务调度、缓存、ORM 框架),是一个基础架构型的开发框架。

        Spring框架包括:IOC容器、Validation数据校验、AOP面向切面编程、Transactions事务管理、Spring JDBC、Spring MVC框架、以及各类第三方JavaEE中间件技术集成。


2.Spring框架由哪些模块组成? 

关键字:官方文档描述,由7个模块组成

Spring Framework根据官方文档的描述,主要包括以下常用5个模块: 

1.Core:核心模块

● IoC Container(loc容器)

● Events (事件通知机制)

● Resources (资源加载机制)

● i18n (国际化)

● Validation(数据校验)

● Data Binding (数据绑定)

● Type Conversio n(类型转换)

● SpEL(Spring表达式)

● A0P(面向切面编程)

2.Testing:测试模块

● Mock Objects (测试模拟对象)

● TestContext Framework(测试框架)

● Spring MVC Test(用于测试SpringMvc)

● WebTestClient(用于测试webclient、Restful.webflux等)

3.Data Access:数据访问模块

● Transactions (事务管理)

● DAO Support(统一的Data Access Object DAO模式封装)

● JDBC ( Spring对于JDBC的操作封装)

● O/R Mapping (Spring对于对象关系映射框架的封装,例如Hibernate等框架)等

4.Web Servlet:基于Servlet的Web应用开发

● Spring MVc (Spring基于MVc模式设计封装的web框架)

● WebSocket(Spring集成WebSocket,它是一个服务器与客户端双向通信的技术)

5. Integration:企业级系统集成模块(不同系统之间的交互集成) 

● Remoting(Spring用于在分布式系统中进行远程服务调用的通讯框架)

● JMS(Spring 集成各类Java消息中间件、Java消息务[Java Message Service ],例如ActiveMQ等)

● Java Email( 邮件发送)

● Tasks Scheduling (任务调度)


3.Spring IOC的理解

关键字:IOC 名词解释,作用是解耦,使用IOC容器管理项目组件之间的耦合关系

IOC(Inversion of Control,中文释义:控制反转)是Spring框架的核心思想之一,主要用于解耦。IOC是指将创建对象的控制权转移给Spring框架进行管理。由Spring框架根据配置文件或注解等方式,创建bean 对象并管理各个bean对象之间的依赖关系。使对象之间形成松散耦合的关系,实现解耦。

控制:指的是对象创建(实例化、管理)的权力

反转:控制权交给外部环境(Spring框架、IOC容器) 


4. Spring IOC容器的理解

关键字:IOC容器的作用、存储形式、初始化过程

IOC通常被理解为IOC Container容器,IOC容器其实就是一个Map,key是每个bean对象的ID,value是bean 对象本身。IOC容器负责创建bean对象并管理bean的生命周期。 并且根据配置好配置文件或注解,管理IOC容器中的每个bean,以及根据bean之间的依赖关系,完成bean之间的注入。 

IOC容器属于Spring Core模块,用来创建和管理Bean,默认使用单例的方式将bean存储在DefaultListableBeanFactory类的beanDefinitionMap中(一个ConcurrentHashMap类型的Map集合);。

IOC 容器使用concurrentHashMap集合存储了BeanDefinition对象,该对象封装了Spring对一个Bean 所有配置信息,包括:类名,属性,构造法参数,依赖,是否延迟加载,是否单例等配置信息。


5.Spring DI的理解

DI (Dependecy Inject,中文释义:依赖注入)是对IOC概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IOC容器注入当前bean对象所需要的另外一个bean对象


6.什么是Spring的bean 

Bean 代表被IOC容器管理的对象。 我们通过配置文件或注解,告诉IOC容器帮助我们管理哪些对象。 


7.将一个类声明为Bean的注解有哪些? 

@Component:定义通用Bean的注解,可标注任意类为Bean。如果一个Bean不知道属于哪个层,可以使用@Component注解标注。

@Repository :定义数据访问层Bean的注解。

@Service:定义业务层Bean的注解

@Controller:定义控制器Bean的注解。 


8.@Component和@Bean的区别是什么? 

● @Component注解作用于,而@Bean注解作用于方法。 

● @Component通常是通过类路径扫描来实现自动扫描并完成装配Bean到Spring IOC容器中。

● @Bean注解通常用于注解某个方法,通过@Bean注解告诉了Spring IOC容器,该方法的返回值实例是一个Bean。 


9.@Autowired和@Resource的区别是什么? 

● @Autowired是Spring提供的注解,@Resource是JDK提供的注解。 

● @Autowired默认的注入方式为byType (按类型自动注入),@Resource默认注入方式为byN ame (按名称自动注入)。 


10. Spring框架中的常见注入方式有几种? 

关键字:整体介绍三种注入方式、分别介绍每个注入方式的细节

Spring IoC有三种注入方式:构造注入、Setter注入、属性注入。

构造注入:使用构造方法注入bean; 

Setter注入:使用Setter方法注入bean: 

属性注入:使用成员属性注入bean,不推荐。原因:使用私有的成员属性变量,依靠反射实现,破坏封装,只能依靠IOC容器实现注入,不严谨。


11.Spring中常见的ApplicationContext实现类有哪些?

ClassPathXmlApplicationContext:根据项目类路径classpath 下的配置文件加载bean

FileSystemXmlApplicationContext:根据当前磁盘的一个绝对系统文件路径下的配置文件加载bean

AnnotationConfigApplicationContext:根据读取到的注解加载bean

WebApplicationContext:Web容器下按照配置文件加载bean


12.BeanFactory和ApplicationContext有什么区别?

关键字:两者之间的关系、区别与不同、Bean的创建加载方式

两者之间的关系:

BeanFactory和ApplicationContext是Spring 的两大核心接口,都可以当做Spring的容器

两者区别与不同

BeanFactory是Spring里面最底层的接口,是IOC的核心,定义了IOC的基本功能,包含了各种Bean的定义、加载、实例化,依赖注入和生命周期管理等行为;

ApplicationContext接口作为BeanFactory接口的子接口,包含BeanFactory 所具备的功能外,还提供了其它框架功能:继承MessageSource (支持国际化),资源文件访问、可以同时加载多个配置文件、可以通过监听器管理bean的生命周期

Bean的创建加载方式

BeanFactroy采用的是延迟加载形式来注入Bean,只有在使用到某个Bean时,才对该Bea n进行加载实例化。这样不能提前发现一些存在的Spring的配置问题。如果Bean的某一个属性没有注入,BeanFacotry 加载后,直至第一次使用调用getBean()方法才会抛出异常ApplicationcContext是在容器启动时,一次性创建所有的Bean。这样,在容器启动时, 我们就可以发现Spring中存在的配置错误,这样有利于检查所依赖属性是否注入,ApplicationContext启动后预载入所有的单实例Bean,所以在运行的时候速度比较快,因为它们已经创建好了。

缺点

相对于BeanFactory,ApplicationContext唯一的不足是占用内存空间,当应用程序配置Bean较多时,程序启动较慢。

 

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值