Spring 之依赖注入
一、依赖注入(Dependency Injection)
依赖注入,也就是在 Spring 框架负责创建 Bean 对象时,动态的将依赖对象注入到 Bean 组件。依赖注入有三种方式:构造方法注入,setter 注入,基于注解的注入。
IoC 容器的初始化过程完成的主要工作是在 IoC 容器中建立 BeanDefinition 数据。在此过程中没有看到 IoC 容器对 Bean 依赖关系进行注入,接下来分析一下 IoC 容器是怎么样对 Bean 的依赖关系进行注入的。
假设 IoC 容器已经载入了用户定义的 Bean 信息。首先,注入到依赖注入的过程是“用户第一次向 IoC 容器索要 Bean”时,触发索要 Bean 的相关属性和方法的依赖注入。当然也有例外,也就是我们可以在 BeanDefinition 信息中通过控制 lazy-init 属性来让容器完成对 Bean 的预实例化。这个预实例化实际上也是一个完成依赖注入的过程,但它是在初始化的过程中完成的,稍后我们分析这个预实例化处理。
1、对象注入
setter,通过类中的 setter 方法进行依赖的注入。
构造器,通过类中的构造方法进行依赖的注入。
spring 容器通过 setter 方法注入实例化的对象,这也是为什么一定要提供 setter 方法,源于属性私有化。同时,对对象之间的依赖关系进行控制。在 applicationContext.xml 配置文件中体现为 bean 元素,单例对象注入成功后,可通过 id 对其进行调用。
通过对 applicationContext.xml 文件下的 bean 配置,对类对象进行属性赋值以及引用对象的传递。对于容器启动时即具有默认值的对象,进行属性配置,方便了程序开发,避免了 Java 硬编码问题。
范例:
2、基于 annotation 的依赖注入(重点)
当需要定义的 bean 越来越多时,在 applicationContext.xml 文件里进行配置,显然已经不是一个合适的方式,所以,spring 提供了一个基于 annotation 的方式进行 bean 的注入和依赖关系传递。Java 代码亦可以进行初始值的设置,至于是采用配置文件进行初始值设置还是采用该方式,具体问题具体看。
applicationContext.xml 文件需要添加注解支持以及配置扫描目录。
spring 基于注解的常见注入类型:
【控制层】控制配置类:@Controller(org.springframework.stereotype.Controller)
【业务层】业务配置类:@Service(org.springframework.stereotype.Service)
【数据层】仓库配置类:@Repository(org.springframework.stereotype.Repository)
【工具组件】组件配置类:@Component(org.springframework.stereotype.Component)
需要注意的是,引用的对象名称分为两种情况(不可完全相信老李)
当首字母是大写,接下来的第二字母是小写,则对象名称是首字母小写的类名称,如 AopDemo 类,对象名称为 aopDemo;
当首字母是大写,接下来有多个大写字母,则对象名称就是类名称,如 AOPDemo 类,对象名称为 AOPDemo。
3、p 命名空间
spring 提供了 p 命名方式对配置进行了简化,实现一行大多多行的配置。
范例:
4、集合注入
诸如属性类(Properties)、数组(Array)和集合(List、Set、Map)而言,spring 也同样提供了强大注入支持。
范例:
二、使用 Maven 搭建 Spring 开发项目
1、创建 Maven 项目
集成开发工具使用 eclipse。创建 Maven 项目的过程中,需要注意以下几点:
1.1、“Select an Archetype”选择“maven-archetype-webapp”模式
1.2、“Group Id”、“Artifact Id”、“Version”、“Package”可自行设置
1.3、修改 Maven 项目中的 Java 开发环境支持,“Java Build Path”下的“libraries”添加“JRE System Library”支持。同时,添加“Server Runtime”支持。
1.4、“Project Facets”选项下的“Dynamic Web Module”和“Java”修改最新的版本。其中,“Dynamic Web Module”的修改,需要先取消支持,进行更新保存。然后再重新选择最新版本进行应用保存,这样的修改才会起作用。
2、添加网站和 Spring 框架支持
2.1、添加 web.xml 文件至 WEB-INF 目录下
2.2、pom.xml 文件添加 spring 开发包支持,也包含公共基础的开发包,如 javaEE api、servlet api、jstl api 以及日志处理等。
2.3、添加 spring 核心配置文件 applicationContext.xml 至 src/main/resources/目录下。
建立好基础的项目配置后,便可以进行项目开发了。这里有个小小的建议。对于 spring 中的 applicationContext.xml 的 xml 元素命名规则验证,在网络环境下,可能因为网络阻塞导致无法通过互联网进行验证,所以,可以采用以下方式进行弥补。
1、下载 spring 相关的 xsd 文件;
2、关闭 xml 验证,【首选项】下的【Validation】取消 XML 规则验证;
图 取消 XML 验证
3、配置 XSD 文件
将 xsd 文件配置到项目里,【Preference】下的【XML】下【XML Catelog】,选择"User Specified Entries",进行添加,但需要注意 key type 要选择 Schema location。
图 XML Catalog
图 Add XML Catalog Element
4、重启 eclipse
重启 eclipse,即可使用
评论