一 spring的基础
1:什么是spring
spring是由Rod Johnson组织和开发的一个分层 的Java SE/EE 一站式轻量级开源框架,它以Ioc(控制反转)和 AOP(面向切面编程)为内核,使用了基本的JavaBean来代替了以前由EJB完成的工作,取代了EJB 的臃肿,低效。
一站式:spring在JavaEE三层框架中(表现层,业务逻辑层,持久层)分别提供了不同的解决技术
表现层:spring中的springmvc
service层:spring的ioc
dao层:spring的jdbcTemplate
轻量级:不需要其他很多的其他东西来支持
框架:是能够完成一定功能的半成品。
框架能够帮助我们完成的是:项目的整体开发框架,一些基础功能,规定了类和对象怎么创建,如何协作,在我们开发一个项目时,框架能够帮助我们完成一部分的功能,我们自己需要完成一部分的功能,
2:spring框架的优点
-
- 非侵入式设计:从框架的角度来看,无需继承框架提供的任何类。
- 方便解耦 :spring就是一个大工厂,可以将所有的对象的创建和依赖关系的维护工作都交给spring来管理,大大降低了组件之间的耦合性。
- 支持AOP:spring提供了AOP的支持,它允许将一些通用的任务,入安全,事务,日志等功能进行集中处理。
- 支持是声明式事务处理:只要通过配置就可以完成对事务的管理,而无需手动的编程。
- 方便程序的测试:spring提供了Junit4的支持,可以通过注解方便的测试spring程序。
- 方便集成各种框架:spring不排斥各种优秀的框架,其内部提供了各种框架的直接支持。
- 降低了javaEE 中一些API的使用难度。
3:Spring的体系结构
spring体系结构图
spring框架采用的是分层架构,它是一系列的功能要素被分为20个模块,主要是Core Container,Data Access/Integration,Web,AOP,Instrumentation,Messaging和Test。
4.spring的下载
Spring压缩包可以通过地址官网下载,点击 http://repo.spring.io.
鼠标点击左边>>符号展开菜单选择Artifacts选项。
选择子菜单下的libs-release-local 选项。
依次进入其子目录org/springframework/spring 就能看到spring 各版本信息了。
选择你需要的spring版本例如4.3.2.RELEASE点击打开选择 ,spring-framework-4.3.2.RELEASE-dist.zip 下载解压即可获得jar包api等等文件。
直接获取方法。URL为最Spring最新4.3.2版本 地址,获取其他版本只需修改下面链接的4.3.2的版本号信息成想要的版本即可。
docs文件夹中包含了spring的API文档和开发规范,libs文件夹中包含了开发所需要的jar包和源码,schema文件夹中包含了开发搜需要的schema文件,这些文件中定义了spring相关配置文件的约束。
libs中的包分为三种:一种是以javadoc结尾的是spring框架API文档的压缩包,以source结尾的是spring框架源文件的压缩包,另一个就是spring框架class文件的压缩包。
spring的核心包主要由四个:spring-core- ,spring-beans- ,spring-context-,spring-expression-,
spring还需要一个依赖包:commons-logging-
二 spring的核心容器
spring框架的主要功能是通过其核心容器来实现的,spring框架提供了两种核心容器:Bean Factory(不常用) 和 Application Context。
容器:从日常来讲,就是盛装东西的组件,从程序来讲,就是装对象的对象,因为存在放入,拿出等操作,还要管理对象的生命周期。
主要讲ApplicationContext容器。
ApplicationContext容器是BeanFactory的子接口,也被称为应用上下文,是spring框架常用的容器
1.ApplicationContext容器的获取:
-通过ClassPathXmlApplicationContext创建
ClassPathXMLApplicationContext会从类路径classpath中去获取指定的XML文件,找到并装载完成ApplicationContext的实例化工作。
AppliationContext applicationContext= new ClassPathXmlApplicationContext(String configLocation);
上述代码中,configLocation是指定spring配置文件的位置和名称。
-通过FileSystemXmlApplicationContext创建
ApplicationContext applicationContext=new FileSystemApplicationConext(String configLocation);
与第一种方法有所不同的是第二种方法使用的路径不是从类路径中去找,而是从给定的位置去找,例如“D:/work/applicationContext.xml”,如果早参数中写的不是路径,这个方法调用的时候回默然使用绝对路径来找,注意:这种使用绝对路径的方法,会导致程序的灵活性变低,
在使用spring框架时,可以通过实例化任何一个类创建ApplicationContext容器。
通常在java程序中,是采用通过ClassPathXMLApplicationContext来实例化ApplicationContext容器的。
在web项目中,通常是把ApplicationContext实例化的工作交给web服务器,web服务器实例化ApplicationContext容器时,通常使用基于ContextLoaderListener实现的方法,这种配置要在web.xml中配置如下代码:
<!--指定spring配置文件的位置,多个配置文件时,以逗号分开-->
<context-param>
<param-name>contextConfigLocation</param-name>
<!--将加载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>
2.使用spring容器来获取bean
spring获取bean的实例通常有两种方法:
Object getBean(String name):根据容器中的bean的ID值来获取指定 的bean,获取之后要进行强制类型转换。
<T> T getBean(Class<T> requiredType):根据类的类型来获取Bean的实例,该方法为泛型,不需要进行强制类型转换。
注意:当使用BeanFactory和ApplicationContext两种容器都是通过XML配置文件来获取bean,两者的区别在于,如果bean的某一个属性没有注入,在使用BeanFactory加载时,在第一次获取bean时会报错,如果使用的是ApplicationContext,会在初始化时自检,这样会有利于检查所有的依赖属性是否注入。