一、什么是spring 框架

spring框架是为了解决企业开发的复杂性,而创建的一个轻量级的容器框架,让开发者更专注代码的开发,编写出更干净、更简洁,易于测试的代码。

二、Spring的优点
(1) 方便解耦,便于开发,将所有对象的创建和依赖关系的维护交给spring管理

(2)spring支持AOP,方便实现对程序进行权限拦截和运行监控等功能

(3)声明式事务的支持,通过配置可以完成事务管理

(4) spring支持junit测试,方便程序测试,

(5) spring可以集成各种优秀的框架。

(6) 降低JavaEEAPI的使用难度,spring对javaee中的一些API进行了封装。比如JDBC,JavaMail等

(7)spring是一种非侵入式的框架,使应用程序代码对框架的依赖最小化

三、spring的体系结构
spring是一个分层架构。

根据功能分为20个模块。大致分为:Core Container,Data Access/Intergration、Web、AOP、Aspects、Instrumention、Messaging、Test。
详细介绍常用模块的功能
3.1 Core Container
Beans模块:提供了BeanFactory,是工厂模式的经典实现,spring将管理对象成为Bean
Core模块:提供sprin框架的基础组成部分,包括了IOC和DI功能
Context上下文模块:建立在core和Beans模块的基础上,访问定义和配置的任务对象的媒介,其中,ApplicationContext接口是上下文模块的焦点
Context-Support模块:提供了第三方库嵌入spring框架的支持,例如,缓存,任务调度,邮件服务,模板引擎等
SpEL模块:对运行时查询和操作对象图的表达式语言的支持。
3.2 Data Access/Intergration(数据访问/集成)
JDBC模块:对JDBC的进行了封装,让开发者专注sql语句的编写。
ORM模块:描述对象和数据之间的映射的元数据,将程序中的对象自动的持久化到关系型数据库中
Transaction事务模块:支持了对实现特殊接口以及所有POJO类的编程和声明式事务管理。
OXM模块:提供了一个支持对象/XML映射的抽象层的实现。如JAXB、Castor、XMLBeans、JiBX和XStream
JMS模块:指Java消息传递服务,包含使用和产生信息的特性
3.3 Web
WebSocket模块:
Servlet模块(spring—webMVC):spring的模型-视图-控制器和REST Web Services实现的Web程序

四、spring的核心容器

spring框架的主要功能是通过核心容器来体现的,spring框架提供了两种核心容器BeanFactory和ApplicationContext

4.1 BeanFactory(了解)

是由org.springframework.beans.facytory.BeanFactory接口定义的,提供了完整的IOC服务。

BeanFactory的常用实现类有org.springframework.beans.factory.xml.XmlBeanFactory,是根据XML配置文件中的定义来配置Bean

加载配置信息:BeanFactory beanFactory=new XmlBeanFactory("F:/applicationContext.xml")

BeanFactory就是一个管理Bean的工厂,主要是负责初始化Bean,并且调用其生命周期

4.2 AppicationContext (应用上下文)

是BeanFactory的子接口,是由org.springframework.context.ApplictionContext接口定义的,

它不仅有 BeanFactory的所有功能,还能对国际化、资源访问、事务传播等方面支持

创建ApplicationContext 接口的实例,通过以下两种方式。

(1)通过ClassPathXmlApplicationContext创建

ClassPathXmlApplicationContext会从类路径classpath中寻找指定的 xml配置文件,并装载完成ApplicationContext的实例化。

(2)通过FileSystemApplicationContext创建

FileSystemApplicationContext会从指定的文件系统路径(绝对路径)中寻找指定的 xml配置文件,并装载完成ApplicationContextde实例化

如果参数中写的不是绝对路径,在调用方法时,会默认用绝对路径来查找,这种方法会导致程序不够灵活。

BeanFactory、AppicationContext的区别:
如果bean的某一个属性没有注入,使用BeanFactory加载后,在第一次调用getbean()的方法时会抛出异常,

而AppicationContext则是在初始化自检,有利于检查所有的依赖属性是否注入

在开发时优先使用AppicationContext。如果在系统资源较少时,才使用 BeanFactory

4.3 获取Spring中的bean容器

初始化spring的容器后,就可以获取spring中的bean,通常有两种方式

(1)Object getBean(String name): 根据容器中的bean的id或那么来获取指定的bean。获取之后需要进行强制转换类型

(2) requiredType):根据类的类型获取bean的实例,因为时泛型方法,获取之后不需要进行强制类型的转换

4.4 Spring的入门
(1)初始化spring容器,加载配置文件
(2) 通过容器获取bean实例
(3) 调用bean实例中的方法

五、 IOC:控制反转,它是一种设计思想,一般创建对象时通过new来实例化 的,但是spring的IOc,是将对象的创建和对象之间的依赖关系的维护交由spring容器管理。
DI:依赖注入,将自身对象中的内置对象通过注入的方式来创建
5.1 依赖注入的实现方式
(1) 属性setter方法注入:指spring容器使用setter方法注入被依赖的实例,通过调用无参构造或者无静态工程方法实例化bean后,通过反射的方式调用该bean的setter方法注入属性值。可以使用元素为每一个属性注入值。
满足要求:
bean类必须提供一个默认的无擦构造方法
bean类必须为需要注入的属性提供对应的setter方法。
(2)构造方法注入:指spring容器使用构造方法注入被依赖的实例,通过调用带参数的构造方法来实现,每一个参数代表一个依赖。
可以使用value属性来设置参数的值
满足条件:提供带所有参数的有参构造方法