spring 核心jar的关系
spring-framework-3.0.5.RELEASE-with-docs.zip解压后四个主要目录
dist 二十几个jar(项目用这个)
docs 文档 API
project 源码
src 二十几个带-sources的jar(包含java源文件)
spring-framework-3.0.5.RELEASE-dependencies.zip解压后很多第三方类库的文件夹
每个文件夹下都有 jar 和 带-sources的jar
普通的Java SE应用
将spring解压缩包dist目录下的jar添加至CLASSPATH环境变量,如果使用Ant工具或者IDE工具,无需添加环境变量。
WEB应用
将spring和第三方类库的jar复制到WEB-INF/lib路径下。
Eclipse
Eclipse通过配置Build Path管理项目编译、运行所依赖的类库。
Create a Java Project -> Build Path -> Add Libraries -> User Library
只能保证在Eclipse下编译、运行通过,如果发布需要将这些jar与应用一同发布。
控制反转(Inversion Of Control,IoC)
由Spring容器为对象设置属性的方式被称为控制反转。
Spring把互相协作的关系称为依赖关系。
依赖注入 目前最优秀的解耦方式
当某个Java实例需要其他Java实例时,系统自动提供所需要的实例,无需程序显式获取。
Spring的Bean以配置文件组织在一起,而不是以硬编码的方式耦合在一起。
调用者直接new被调用者的方式
1、扩展性差 被调用者扩展时 调用者的代码也需要改变
2、职责不清 我只需要使用被调用者的方法 却需要创建被调用者
依赖注入定义
程序运行过程中,如果需要另一个对象协作(调用它的方法、访问它的属性时)时,无需在代码中创建被调用者,而是依赖于外部容器的注入。
1、设值注入 2、构造注入
面向接口编程 更好地让规范和实现分离
对于一个JAVA EE应用,不管是DAO组件,还是业务逻辑组件,都应该先定义接口,该接口定义了该组件应该实现的功能。
Spring既可以采用DTD来定义配置文件的语义约束,也可以采用XML Schema来定义配置文件的语义约束。
projects目录的org.springframework.beans、org.springframework.context等子目录的src/main/resources路径下找到各种*.xsd文件
Spring IoC容器的3个基本点:
- 各组件面向接口编程,各个组件的耦合提升至接口层次
- 各个组件不再是程序主动产生
- Spring采用配置文件、Annotation来管理Bean的实现类、依赖关系
构造注入优势:
- 决定依赖关系的注入顺序,如优先注入Datasource
- 依赖关系无需变化
- 只有组件创建者才能改变依赖关系,对调用者透明,符合高内聚原则
劣势:
- 没有设值注入直观、自然
- 复杂的依赖关系过于臃肿,同时实例化依赖的全部实例,性能下降
- 属性可选,更显笨重