配色: 字号:
第2章 Spring基本应用
2022-09-26 | 阅:  转:  |  分享 
  
2.1Spring概述2.2搭建Spring的入门程序2.3Spring的核心机制:依赖注入/控制反转第2章Spring基本
应用2.1Spring概述2.1.12.1.22.1.32.1.42.1.1Spring的概念Spring从2004的第一个
版本至今已经十几年了,Spring是由RodJohnson组织和开发的一个分层的Java一站式轻量级框架,它以IoC(控制反转
)和AOP(面向切面编程)为内核。在Spring中,它会认为一切Java类都是资源,而资源都是Bean,容纳这些Bean的是Spr
ing所提供的IoC容器,所以Spring是一种基于Bean的编程,它深刻地改变着Java开发世界。Spring是一个轻量级框架
,它大大简化了Java企业级开发,提供了强大、稳定的功能,又没有带额外的负担,让使用Spring的人做每一件事情的时候都有得体和优
雅的感觉。Spring致力于JavaEE应用各层的解决方案,而不是仅仅专注于某一层的方案,这就充分体现出Spring是一个全面的
解决方案,对于已经有较好解决方案的领域,Spring绝不做重复的事情。2.1.2Spring的优点Spring作为实现Java
EE的一个全方位应用程序框架,具有以下几个特点:非侵入式:容器:IoC:依赖注入:AOP:2.1.3Spring的体系结构
Spring框架(SpringFramework)不断在发展和完善,目前Spring框架由20多个功能模块构成:2.1.3Sp
ring的体系结构组成Spring框架的每个模块(或组件)可以单独存在,或者与其他一个或多个模块联合实现。具体如下:(1)C
oreContainer,核心容器提供了Spring的基本功能,它主要由Beans模块、Core模块、Context模块和
SpringEL模块组成。(2)DataAccess/Integration,数据访问/集成层包括JDBC、ORM、OXM
、JMS和Transactions模块。(3)Web,Web层包括WebSocket、Servlet、Web和Portlet模
块。(4)其他模块,Spring的其他模块还有AOP、Aspects、Instrumentation以及Test模块。2.1.
4Spring的下载和结构Spring的最新版本是5.0.4,本书的代码也是在基于该版本的Spring测试通过,建议也下载该版
本。Spring是一个独立的框架,它不需要依赖于任何Web服务器或容器,既可在独立的JavaSE项目中使用,当然也可在Java
Web项目中使用。下载Spring框架可按如下步骤进行:2.1.4Spring的下载和结构(1)登录https://rep
o.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-l
ocal/或者登录http://repo.springsource.org/libs-release-local/,依次找到or
g-->springframework-->spring的路径进入,既可看到Spring框架各版本的压缩包的下载链接,这里我们选择
5.0.4RELEASE的版本,点击spring-framework-5.0.4.RELEASE-dist.zip下载该文件。
(2)下载完成后,将压缩文件解压缩后得到一个名为spring-framework-5.0.4.RELEASE的文件夹,目录结构如图
所示。2.1.4Spring的下载和结构(3)在libs目录中,有四个Spring的基础包,分别对应Spring核心容器的四
个模块,分别是spring-core-5.0.4.RELEASE.jar、spring-beans-5.0.4.RELEASE.j
ar、spring-context-5.0.4.RELEASE.jar、spring-expression-5.0.4.RELEA
SE.jar。(4)除此之外,使用Spring开发,除使用自带的jar包外,还要依赖于commons-logging的jar包文
件,可通过http://commons.apache.org/proper/commons-logging/download_lo
gging.cgi网址下载。下载完成得到一个commons-logging-1.2-bin.zip的压缩包。将该压缩包解压后,即
可找到commons-logging-1.2.jar。2.2搭建Spring的入门程序下面通过示例程序来演示Spring框架
的简单应用,只用到了Spring框架而没有使用其它技术,实现步骤如下所示:(1)在Eclipse中,创建一个名为“sprin
g-1”的Java项目。(2)复制前面叙述的四个Spring的基础包。(3)复制日志包commons-logging-1.
2.jar。(4)将jar包添加到项目的构建路径中。(5)在项目中创建com.ssm包,并创建HelloSpring类
。(6)在项目src目录下创建applicationContext.xml文件。(7)在com.ssm包中创建测试类T
estHelloSpring。2.3Spring的核心机制:依赖注入/控制反转2.3.12.3.22.3.32.3.1依赖
注入的概念Spring的核心机制就是IoC(控制反转)容器,IoC的另外一个称呼是依赖注入(DI),只不过这两个称呼是从两个角度
描述的同一个概念。通过依赖注入,JavaEE应用中的各种组件不需要以硬编码的方法进行耦合,当一个Java实例需要其他Java实例
时,系统自动提供需要的实例,无需程序显式获取。因此,依赖注入实现了组件之间的解耦。依赖注入和控制反转含义相同,当某个Java对
象(调用者)需要调用另一个Java对象(被调用者,即被依赖对象)时,传统的方法是由调用者采用“new被调用者”的方式来创建对象,
这种方式会导致调用者和被调用者之间的耦合性增加,对项目的后期升级和维护不利。2.3.1依赖注入的概念在使用Spring框架后
,对象的实例不在由调用者来创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直
接控制。这样,控制权由应用程序代码转移到了Spring容器,控制权发生了反转,这就是Spring的控制反转。从Spring容器的
角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这就相当于为调用者注入了它依赖的实例,这就是Spring的依赖注
入。Spring提倡面向接口的编程,依赖注入的基本思想是:明确地定义组件接口,独立开发各个组件,然后根据组件的依赖关系组装运行。
2.3.2依赖注入的类型依赖注入的作用就是使用Spring框架创建对象时,动态的将其所依赖的对象注入到Bean组件中,其实现
主要有以下方式,一种是构造方法注入,另一种是属性setter方法注入。(1)构造方法注入指Spring容器使用构造方法注入被依
赖的实例,构造方法可以是有参数的或者是无参的。在大多数情况下,我们都是通过构造方法来创建类对象,Spring也可以采用反射的方式,
通过使用带参数的构造方法来完成注入,每个参数代表着一个依赖,这就是构造方法注入的原理。这种注入方式,如果参数比较少,可读性还是不错
的,但参数很多,那么这种构造方法就比较复杂了,这个时候应该考虑属性setter方法注入。示例:构造方法注入2.3.2依赖注
入的类型(2)属性setter方法注入指Spring容器使用setter方法注入被依赖的值或对象,是常见的一种注入方式,这种注
入方式具有高度灵活性。该方式要求Bean提供一个默认的构造方法,并为需要注入的属性提供对应的setter方法。Spring先调用B
ean的默认构造方法实例化Bean,然后通过反射的方式调用setter方法注入属性值。这种方式是Spring最为主要的方式,在实际
工作中使用广泛。在前面2.2小节的示例中,userName属性就是采用属性setter方法注入实现。Spring配置文件从2
.0版本开始采用schema形式,使用不同的命名空间管理不同类型的配置,使得配置文件更具扩展性。Spring基于schema的配置
方案为许多领域的问题提供了简化的配置方法,降低了配置的工作量。示例:使用p命名空间来简化属性的注入2.3.2依赖注入的类型
(3)两种注入方式的对比Spring同时支持构造方法注入和属性setter方法注入两种注入方式,它们各有优缺点,开发中可以根据实
际需要灵活选择,两种方式的特点总结如下:使用setter方法时,与JavaBean写法更类似,更容易了解和接受,通过setter
方法设定依赖关系显得更加直观、自然。对于复杂的依赖关系,如果采用构造方法注入,会导致构造器过于臃肿,难于阅读。构造方法注入可以
在构造器中决定依赖关系的注入顺序,当某些属性的赋值操作是有先后顺序时,这点尤为重要。对于依赖关系无须变化的Bean,构造方法注入
更有用处。如果没有setter方法,所有的依赖关系全部在构造器内设定,后续代码不会对依赖关系产生破坏。2.3.3依赖注入的示例
下面通过属性setter方法注入的为例,实现一个简单的登录验证,讲解一下Spring容器在程序中是如何实现依赖注入的(1)将项
目spring-1复制并重命名为“spring-2”。(2)编写DAO层新建接口UserDAO.java,在接口中添加方法
login()创建UserDAO的实现类UserDAOImpl,实现login()(3)编写Service层新建接口Use
rService.java,在接口中添加方法login(),创建UserService的实现类UserServiceImpl,实现login()(4)配置applicationContext.xml文件(5)编写测试类TestSpringDI1.6小结本章主要介绍了Spring框架入门的一些基础知识。首先讲解了Spring框架的概念、优点、体系结构以及下载和下载后的目录结构,然后通过一个简单的HelloSpring入门程序演示Spring框架的简单应用,并演示了依赖注入中的构造方法注入和属性setter方法注入,最后通过的登录验证为例,讲述了Spring的核心机制:依赖注入/控制反转。
献花(0)
+1
(本文系太好学原创)