1.Spring是什么?
(1)Spring是一个轻量级的IOC和AOP容器框架。是为了java应用程序提供基础服务的一套框架,目的是为了用于简化企业应用程序的开发,它使得开发者只需要 关心业务需求。
(2)常见的配置方式有三种:
基于 XML 的配置,基于注解的配置,基于 Java 的配置。
(3)主要由以下几个模块组成:
Spring Core:核心类库,提供 IOC 服务;
Spring Context:提供框架式的 Bean 访问方式,以及企业级功能(JNDI. 定时任务等);
Spring AOP:AOP 服务;
Spring DAO:对 JDBC 的抽象,简化了数据访问异常的处理;
Spring ORM:对现有的 ORM 框架的支持;
Spring Web:提供了基本的面向 Web 的综合特性,例如多方文件上传;
Spring MVC:提供面向 Web 应用的 Model-View-Controller 实现。
2.Spring的优点
(1) Spring 属于低侵入式设计,代码的污染极低;
(2) Spring 的 DI 机制将对象之间的依赖关系交由框架处理,减低组件的 耦合性; 110
(3) Spring 提供了 AOP 技术,支持将一些通用任务,如安全.事务.日志. 权限等进行集中式管理,从而提供更好的复用。
(4) Spring 对于主流的应用框架提供了集成支持。
3.Spring的IOC理解
(1) IOC 就是控制反转,是指创建对象的控制权的转移,以前创建对象的 主动权和时机是由自己把控的,而现在这种权力转移到 Spring 容器中,并由容 器根据配置文件去创建实例和管理各个实例之间的依赖关系,对象与对象之间松散耦合,也利于功能的复用。
DI 依赖注入,和控制反转是同一个概念的不同角度 的描述,即 应用程序在运行时依赖 IoC 容器来动态注入对象需要的外部资源。
(2) 最直观的表达就是,IOC 让对象的创建不用去 new 了,可以由spring 自动生产,使用 java 的反射机制,根据配置文件在运行时动态的去创建对象以 及管理对象,并调用对象的方法的。
(3) Spring 的 IOC 有三种注入方式 :构造器注入.setter 方法注入.根据 注解注入。
IOC 让相互协作的组件保持松散的耦合,而 AOP 编程允许你把遍布于应用 各层的功能分离出来形成可重用的功能组件
4.BeanFactory 和ApplicationContext 有什么区别?
BeanFactory 和 ApplicationContext 是 Spring 的两大核心接口,都可以 当做 Spring 的容器。其中 ApplicationContext 是 BeanFactory 的子接口。
(1) BeanFactory:是 Spring 里面最底层的接口,包含了各种 Bean 的定 义,读取 bean 配置文档,管理 bean 的加载.实例化,控制 bean 的生命周期, 维护 bean 之间的依赖关系。ApplicationContext 接口作为 BeanFactory 的派 生,除了提供 BeanFactory 所具有的功能外,还提供了更完整的框架功能:
1)继承 MessageSource,因此支持国际化。
2)统一的资源文件访问方式。
3)提供在监ting器中注册 bean 的事件。
4)同时加载多个配置文件。
5)载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的 层次,比如应用的 web 层。
(2) BeanFactroy 采用的是延迟加载形式来注入 Bean 的,即只有在使用 到某个 Bean 时(调用 getBean()),才对该 Bean 进行加载实例化。这样,我们 就不能发现一些存在的Spring 的配置问题。如果Bean 的某一个属性没有注入, BeanFacotry 加载后,直至第一次使用调用 getBean 方法才会抛出异常。 ApplicationContext,它是在容器启动时,一次性创建了所有的 Bean。这 样,在容器启动时,我们就可以发现 Spring 中存在的配置错误,这样有利于检查 所依赖属性是否注入。ApplicationContext 启动后预载入所有的单实例Bean, 通 过预载入单实例 bean ,确保当你需要的时候,你就不用等待,因为它们已经 创建好了。 相对于基本的 BeanFactory,ApplicationContext 唯一的不足是占用内存 空间。当应用程序配置 Bean 较多时,程序启动较慢。
(3) BeanFactory 通常以编程的方式被创建,ApplicationContext 还能 以声明的方式创建,如使用 ContextLoader。
(4) BeanFactory 和 ApplicationContext 都支持 BeanPostProcessor.BeanFactoryPostProcessor 的使用,但两者之间的区别 是:BeanFactory 需要手动注册,而 ApplicationContext 则是自动注册。

5.Spring ApplicationContext的三个常用实现类
(1) ClassPathXmlApplicationContext:可以加载类路径下的配置文件,要求配置文件必须在类路径下。不在的话,加载不了。
例 ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
(2) FileSystemXmlApplicationContext:可以加载磁盘任意路径下的配置文件(必须有访问权限)
(3) AnnotationConfigApplicationContext:读取一个Java类作为配置文件(读取注解创建容器
6.Spring 基于xml 注入bean 的几种方式
(1) Set 方法注入;
(2) 构造器注入:1) 通过 index 设置参数的位置;2) 通过type 设置参数类型;3)通过 name 注入
(3) 静态工厂注入;
(4) 实例工厂;
7.bean的作用范围
在Spring中,对于bean支持五种作用范围:

  • singleton(默认) 单例模式,即对象只创建一次, 然后一直存在, 直到Spring容器关闭
  • prototype 多例模式,即每次获取bean的时候,IOC都给我们创建一个新对象
  • request web项目中,Spring创建一个Bean的对象,将对象存入到request域中
  • session web 项目中,Spring 创建一个Bean 的对象,将对象存入到session域中
  • globalSession 用于分布式web开发中,创建的实例绑定全局session对象

8.Bean的生命周期
Bean的构造过程
(1)Spring启动,查找并加载需要被Spring管理的bean,进行Bean的实例化
(2)Bean实例化后对将Bean的引入和值注入到Bean的属性中
(3)如果Bean实现了BeanNameAware接口的话,Spring将Bean的Id传递给setBeanName()方法
(4)如果Bean实现了BeanFactoryAware接口的话,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入
(5)如果Bean实现了ApplicationContextAware接口的话,Spring将调用Bean的setApplicationContext()方法,将bean所在应用上下文引用传入进来。
(6)如果Bean实现了BeanPostProcessor接口,Spring就将调用他们的postProcessBeforeInitialization()方法。
(7)如果Bean 实现了InitializingBean接口,Spring将调用他们的afterPropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用
(8)如果Bean 实现了BeanPostProcessor接口,Spring就将调用他们的postProcessAfterInitialization()方法。
(9)此时,Bean已经准备就绪,可以被应用程序使用了。他们将一直驻留在应用上下文中,直到应用上下文被销毁。
(10)如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,同样,如果bean使用了destory-method 声明销毁方法,该方法也会被调用。