Spring框架总结笔记
spring的基础jar包
Spring中libs目录下的,包含Spring框架中的所有Jar文件,其中四个jar文件是基础包,具体如下:
名称 | 作用 |
---|---|
Spring-core | 包含Spring框架基本的核心工具类,Spring其他组件都要用到这个包中的类,是其他组件的基本核心。 |
Spring-beans | 所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行ioc或者Di操作相关的所有类。 |
Spring-context | Spring提供基础ioc功能上的扩展五福,此外还提供许多企业级的支持、比如有邮件服务、任务调度、jndi定位、Ejb集成、远程访问、缓存以及各种视图框架的封装等。 |
Spring-expression | 定义了spring的表达语言。 需要注意的是、在使用spring开发时,除了spring自带的jar包之外、还需要一个第三方jar包commons.logging处理日志信息 |
spring ioc容器
ioc 是指程序开发中,实例的创建不再是由调用者管理,而是由spring容器创建。Spring容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,在控制权由程序代码转移到了Spring的容器中,控制全发生了反转,这就是spring的Ioc思想。
IOC容器
BeanFactory
BeanFactory是基础类型的IOC容器,它由 org.springframework.beans.facytory.BeanFactory 接口定义,并提供了完整的 IoC 服务支持。
简单来说,BeanFactory就是一个管理Bean的工厂,它主要负责初始化各种Bean,并调用它们的生命周期方法。
BeanFactory 接口有多个实现类,最常见的是 org.springframework.beans.factory.xml.XmlBeanFactory,它是根据 XML 配置文件中的定义装配 Bean 的。
创建 BeanFactory 实例时,需要提供 Spring 所管理容器的详细配置信息,这些信息通常采用 XML 文件形式管理。其加载配置信息的代码具体如下所示:
BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("D://applicationContext.xml"));
ApplicationContext
== ApplicationContext 是 BeanFactory 的子接口==,也被称为应用上下文。该接口的全路径为 org.springframework.context.ApplicationContext,它不仅提供了 BeanFactory 的所有功能,还添加了对 i18n(国际化)、资源访问、事件传播等方面的良好支持。
ApplicationContext 接口有两个常用的实现类,具体如下。
1)ClassPathXmlApplicationContext
该类从类路径 ClassPath 中寻找指定的 XML 配置文件,找到并装载完成 ApplicationContext 的实例化工作,具体如下所示。
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);
在上述代码中,configLocation 参数用于指定 Spring 配置文件的名称和位置,如 applicationContext.xml。
2)FileSystemXmlApplicationContext
该类从指定的文件系统路径中寻找指定的 XML 配置文件,找到并装载完成 ApplicationContext 的实例化工作,具体如下所示。
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);
它与 ClassPathXmlApplicationContext 的区别是:在读取 Spring 的配置文件时,FileSystemXmlApplicationContext 不再从类路径中读取配置文件,而是通过参数指定配置文件的位置,它可以获取类路径之外的资源,如“F:/workspaces/applicationContext.xml”。
在使用 Spring 框架时,可以通过实例化其中任何一个类创建 Spring 的 ApplicationContext 容器。
通常在 Java 项目中,会采用通过 ClassPathXmlApplicationContext 类实例化 ApplicationContext 容器的方式,而在 Web 项目中,ApplicationContext 容器的实例化工作会交由 Web 服务器完成。Web 服务器实例化 ApplicationContext 容器通常使用基于 ContextLoaderListener 实现的方式,它只需要在 web.xml 中添加如下代码:
<!--指定Spring配置文件的位置,有多个配置文件时,以逗号分隔-->
<context-param>
<param-name>contextConfigLocation</param-name>
<!--spring将加载spring目录下的applicationContext.xml文件-->
<param-value>
classpath:spring/applicationContext.xml
</param-value>
</context-param>
<!--指定以ContextLoaderListener方式启动Spring容器-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
需要注意的是,BeanFactory 和 ApplicationContext 都是通过 XML 配置文件加载 Bean 的。
二者的主要区别在于,
如果Bean的某一个属性没有注入,则使用BeanFactory加载后,在第一次调用GetBean()方法的时候会抛出异常,
而ApplicationContext则在初始化时自检,这样有利于检查所依赖的属性是否注入。
因此,在实际开发中,通常都选择使用ApplicationContext,而只有在系统资源较少时,才会考虑使用BeanFactory。