Spring面试(记录学习笔记)
- 什么是spring?
spring是个java企业级应用的开源框架。spring主要用来开发java应用,但是有些拓展是针对构建J2EE平台的web应用。Spring框架目标是简化java企业级开发应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。 - 使用Spring框架的好处是什么?
1.轻量:Spring是轻量的,基本的版本大约2MB。
2.控制反转:Spring通过控制反转实现了松耦合,对象们给出它们的依赖,而不是创建或者查找依赖的对象们。
3.面向切面编程:Spring支持面向切面的编程,并把应用业务逻辑和系统服务分开。
4.容器:Spring包含并管理应用中的对象的生命周期和配置。
5.MVC框架:Spring的WEB框架是个精心设计的框架,是web框架的一个很好的替代品。
6.事务管理:spring提供一个持续的事物管理接口,可以拓展到上至本地事物下至全局事务。
7.异常处理:spring提供方便的API把具体技术相关的异常(比如JDBC,Hibernate or JDO抛出的)转化成为一致的unchecked异常。 - 核心容器模块
这是基本的Spring模块,提供spring框架的基础功能,BeanFactory是任何以spring为基础的应用的核心。spring框架建立在此模块之上,它使spring成为一个容器。 - BeanFactory-BeanFactory实现距离
Bean工厂是工厂模式的一个实现,提供了控制反转功能,用来把应用的配置和依赖从真正的应用代码中分离。
最常见的BeanFactory实现是XmlBeanFactory类。 - XMLBeanFactory
它根据xml文件中的定义加载beans,该容器从xml文件读取配置元数据并用它区创建一个完全配置的系统或应用。 - 解释AOP模块
AOP模块用于发给我们的Spring应用做面向切面的开发,很多支持由AOP联盟提供,这样确保了spring和其他AOP框架的共通性,这个模块将元数据编程引入Spring。 - 解释JDBC抽象和DAO模块
通过使用JDBC抽象和DAO模块,保证数据库diamante的简洁,并能避免数据库资源错误关闭导致的问题,它在各个不同的数据库的错误信息之上,提供了一个统一的异常访问层,它还利用spring的AOP模块个Spring应用中的对象提供事务管理服务。 - 解释对象/关系映射集成模块
Spring通过提供ORM模块,支持我们在直接JDBC之上使用一个对象/关系映射(ORM)工具,Spring支持集成主流的ORM框架,如Hibernate,JDO和iBATIS SQL Maps。Spring的事物管理同样支持以上所有ORM框架及JDBC。 - 解释WEB模块
Spring的WEB模块是构建在application context模块基础之上,提供一个适合web应用的上下文。这个模块也包括支持多种面向web的任务,如透明的处理多个文件上传请求和程序级请求参数的绑定到你的业务层对象。它也有对Jakarta Struts的支持。 - Spring配置文件
spring配置文件是个xml文件,这个文件包含了类信息,描述了如何配置它们,以及如何相互调用。 - 什么是Spring IOC容器
Spring IOC负责创建对象,管理对象,装配对象,配置对象,并且管理这些对象的整个生命周期。 - IOC的优点是什么
IOC或依赖注入把应用的代码量降到最低,它使应用容易测试,单元测试不在需要单例和JNDI查找机制。最小的代价和最小的侵入性使松散耦合得以实现。IOC容器支持加载服务时的饿汉式初始化和懒加载。 - ApplicationContext通常的实现是什么?
FileSystemXmlApplicationContext:此容器从一个XML文件中加载beans的定义,xml Bean配置文件的全路径名必须提供给它的构造函数。
ClassPathXmlApplicationContext:此容器也是从一个XML文件中加载beans的定义,这里,需要正确设置classPath,因为这个容器将在classpath里找bean配置。
WebXmlApplicationContext:此容器加载一个xml文件,此文件定义了一个WEB应用的所有bean。 - 什么是Spring的依赖注入?
组件之间依赖关系由容器在运行期决定的,就是说容器动态将某个依赖关系注入到组建中,依赖注入的目的是为了提升组件重复使用的频率。 - Spring的运行流程
1.加载配置文件
//ApplicationContext接口,它是由BeanFactory接口派生而来,因而提供了BeanFactory的所有功能,
//配置文件中的bean信息是被加载到HashMap中的。一个bean通常包含id,class,property等。
//bean的id对应着HashMap中的key,value就是bean。
ApplicationContext ac = new ClassPathXMLApplicationContext("bean.xml");
2.调用getBean()方法,getBean是用来获取ApplicationContext.xml文件中的bean的。()中写的bean的id,一般情况写需要强制转成对应的业务层。
3.调用业务层的方法。
16. IOC的含义:
IOC,控制反转,就是把创建对象和维护对象之间关系的权利从程序转移到Spring容器。
17. Spring框架的设计目标,设计理念,和核心是什么?
Spring设计目标:Spring为开发者提供一个一站式轻量级应用开发平台。
Spring设计理念:在JavaEE开发中,支持POJO和JavaBean开发方式,使应用面向接口开发,充分支持面向对象的设计方式;Spring通过IOC容器实现对象耦合关系的管理,并实现控制反转,将对象之间的依赖关系交给IOC容器,实现解耦。
Spring框架的核心:IOC容器和AOP模块,通过IOC容器管理POJO对象以及他们之间的耦合关系;通过AOP以动态非侵入的方式增强服务。IOC让相互协作的组件保持松散的耦合,而AOP编程允许我们把遍布于应用各层的功能分离出来形成可以重用的功能组件。
18. Spring框架中都用到了哪些设计模式?
1.工厂模式:BeanFactory就是简单工厂模式的提现,用来创建对象实例。
2.单例模式:Bean默认就是单例模式。
3.代理模式:SpringAOP用到了JDK的动态代理。
4.模板模式:用来解决代码重复问题,如JpaTemplate。
5.观察者模式:定义对象间一种一对多的依赖关系。
19. 有哪些不同类型的依赖注入实现方式?
依赖注入分为Setter方法注入,构造器注入。
20.spring配置文件中的bean标签中的属性:
id:bean的名称,唯一标识;
class:bean对象的全路径名(利用Java中的反射技术);
scope:表示bean的作用范围,singleton单例,prototype多例,request每次请求都会创建一个新的bean,session同一个http session共享一个bean,globalsession多个服务器间的session共享一个bean;