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较多时,程序启动较慢。