版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章SpringIoC学习目的与要求本章主要介绍了SpringIoC的基本概念、SpringIoC容器以及依赖注入的类型等内容。通过本章的学习,了解SpringIoC容器,掌握SpringIoC的基本概念以及依赖注入的类型。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社目录2.1SpringIoC的基本概念2.2SpringIoC容器2.3依赖注入的类型《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社2.1SpringIoC的基本概念控制反转(InversionofControl,IoC)是一个比较抽象的概念,是Spring框架的核心,用来消减计算机程序的耦合问题。依赖注入(DependencyInjection,DI)是IoC的另外一种说法,只是从不同的角度,描述相同的概念。当某个Java对象(调用者,比如您)需要调用另一个Java对象(被调用者,即被依赖对象,比如面包)时,在传统编程模式下,调用者通常会采用“new
被调用者”的代码方式来创建对象(比如您自己制作面包)。这种方式会增加调用者与被调用者之间的耦合性,不利于后期代码的升级与维护。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社当Spring框架出现后,对象的实例不再由调用者来创建,而是由Spring容器(比如面包店)来创建。Spring容器会负责控制程序之间的关系(比如面包店负责控制您与面包的关系),而不是由调用者的程序代码直接控制。这样,控制权由调用者转移到Spring容器,控制权发生了反转,这就是Spring的控制反转。从Spring容器角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,相当于为调用者注入它所依赖的实例,这就是Spring的依赖注入,主要目的是为了解耦,体现一种“组合”的理念。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社2.1SpringIoC的基本概念目录2.1SpringIoC的基本概念2.2SpringIoC容器2.3依赖注入的类型《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社2.2.1BeanFactoryBeanFactory由org.springframework.beans.factory.BeanFactory接口定义,它提供了完整的IoC服务支持,是一个管理bean的工厂,主要负责初始化各种bean,用于访问SpringIoC容器的根接口。虽然,XML文件一直是定义配置元数据(如bean的定义)的传统格式,但可以通过提供少量XML配置以声明方式启用对其它元数据格式(如Java注解)的支持。本书采用XML文件和Java注解相结合的方式,进行Spring应用的相关配置。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社DefaultListableBeanFactory类是BeanFactory接口的默认实现,同时也是BeanDefinitionRegistry接口的实现。BeanDefinitionRegistry接口定义了bean的注册、移除、查询等一系列操作。BeanFactory可以结合XmlBeanDefinitionReader类加载XML配置文件中bean的定义,来初始化SpringIoC容器。在Spring框架中,构成应用程序的基本单元并由SpringIoC容器管理的对象称为bean。bean是由SpringIoC容器实例化、组装和管理的对象。【例2-1】使用DefaultListableBeanFactory类创建BeanFactory实例,初始化SpringIoC容器。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社2.2.1BeanFactory2.2.2ApplicationContextApplicationContext是BeanFactory的子接口,也称为应用上下文,由ApplicationContext接口定义。ApplicationContext接口除了包含BeanFactory的所有功能,还添加了对国际化、资源访问、事件传播等内容的支持。因此,通常建议使用ApplicationContext接口初始化SpringIoC容器。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社1.通过ClassPathXmlApplicationContext创建ClassPathXmlApplicationContext将从classPath类路径(src/main/java目录)寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。【例2-2】使用ClassPathXmlApplicationContext类创建ApplicationContext实例,初始化SpringIoC容器。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社2.通过FileSystemXmlApplicationContext创建FileSystemXmlApplicationContext将从指定文件的绝对路径中寻找XML配置文件,找到并装载完成ApplicationContext的实例化工作。【例2-3】使用FileSystemXmlApplicationContext类创建ApplicationContext实例,初始化SpringIoC容器。采用绝对路径的加载方式,将导致程序的灵活性变差,一般不推荐使用。因此,通常在Spring的Java应用中,通过ClassPathXmlApplicationContext类来实例化ApplicationContext容器。而在Web应用中,ApplicationContext容器的实例化工作将交给Web服务器完成。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社3.通过Web服务器实例化ApplicationContext容器Web服务器实例化ApplicationContext容器时,一般使用基于ContextLoaderListener的实现方式,此方法只需在web.xml中添加如下代码。综上所述,在Spring框架中,应用程序类与配置元数据(如XML配置文件中bean的定义)相结合,创建和初始化ApplicationContext(SpringIoC容器)后,就产生了一个完全配置且可执行的系统或应用程序,如图2.1所示。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社2.2.3GenericApplicationContextGenericApplicationContext是最为灵活的应用程序上下文实现,该实现内部有一个DefaultListableBeanFactory实例。GenericApplicationContext可以采用混合方式处理bean的定义,而不是采用特定的bean定义方式来创建bean。对于基于XML的bean定义,虽然可以使用ClassPathXmlApplicationContext或FileSystemXmlApplicationContext类代替,但是他们不能使用混合(如properties属性文件)的bean定义,而且文件路径的表示方式单一,不能灵活修改。【例2-4】通过XML和properties的混合方式来创建bean。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社目录2.1SpringIoC的基本概念2.2SpringIoC容器2.3依赖注入的类型《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社2.3.1构造方法注入Spring框架可以采用Java的反射机制,通过构造方法完成依赖注入。基于构造方法的依赖注入,是通过容器调用带有多个参数的构造方法来实现的,每个参数表示一个依赖项。下面通过一个实例讲解构造方法注入的实现过程。【例2-5】构造方法注入的实现过程。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社1.创建Web应用并导入JAR包创建名为ch2_5的DynamicWebProject应用,并将Spring的四个基础包和SpringCommonsLoggingBridge对应的JAR包spring-jcl-6.0.0.jar复制到ch2_5的WEB-INF/lib目录中。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社2.创建dao在ch2_5应用的src/main/java目录下,创建dao包,并在该包中创建TestDIDao接口和接口实现类TestDIDaoImpl。创建dao的目的是在service中使用构造方法依赖注入TestDIDao接口对象。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社3.创建service在ch2_5应用的src/main/java目录下,创建service包,并在该包中创建TestDIService接口和接口实现类TestDIServiceImpl。在TestDIServiceImpl中使用构造方法依赖注入TestDIDao接口对象。publicclassTestDIServiceImplimplementsTestDIService{
//TestDIServiceImpl依赖于TestDIDao privateTestDIDaotestDIDao;
//构造方法,用于实现依赖注入接口对象testDIDao publicTestDIServiceImpl(TestDIDaotestDIDao){ super(); this.testDIDao=testDIDao;
} ……}《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社4.编写配置文件在ch2_5应用的src/main/java目录下,创建Spring配置文件applicationContext.xml。在配置文件中,首先,将dao.TestDIDaoImpl类托管给Spring,让Spring创建其对象。其次,将service.TestDIServiceImpl类托管给Spring,让Spring创建其对象,同时给构造方法传递实参。
<!--将指定类TestDIDaoImpl配置给Spring,让Spring创建其实例--> <beanid="myTestDIDao"class="dao.TestDIDaoImpl"/>
<!--使用构造方法注入--> <beanid="testDIService"class="service.TestDIServiceImpl">
<!--将myTestDIDao注入到TestDIServiceImpl类的属性testDIDao上--> <constructor-argindex="0"ref="myTestDIDao"/> </bean>《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社5.创建test在ch2_5应用的src/main/java目录下,创建test包,并在该包中创建测试类TestDI。appCon=newClassPathXmlApplicationContext("applicationContext.xml");//通过容器获取testDIService实例,测试构造方法注入TestDIServicets=(TestDIService)appCon.getBean("testDIService");ts.sayHello();使用构造方法注入,避免循环依赖注入的情况,例如,类A通过构造方法注入类B的实例,而类B通过构造方法注入类A的实例。此情况,需要将A和B的bean配置为相互注入,SpringIoC容器在运行时检测到循环引用,将抛出BeanCurrentlyInCreationException。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社2.3.2属性Setter方法注入Setter方法注入是Spring框架中最主流的注入方式,它利用JavaBean规范所定义的Setter方法来完成注入,灵活且可读性高。基于Setter方法的依赖注入,是在调用无参数构造方法或无参数静态工厂方法来实例化bean之后,通过容器调用bean的Setter方法来实现的。Setter方法注入,Spring框架也是使用Java的反射机制实现的。【例2-6】Setter方法注入的实现过程。《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社1.创建接口实现类TestDIServiceImpl1在service包中,创建接口实现类TestDIServiceImpl1,在TestDIServiceImpl1中使用属性Setter方法依赖注入TestDIDao接口对象。publicclassTestDIServiceImpl1implementsTestDIService{
//TestDIServiceImpl1依赖于TestDIDao privateTestDIDaotestDIDao;
//添加testDIDao属性的Setter方法,用于实现依赖注入
publicvoidsetTestDIDao(TestDIDaotestDIDao){ this.testDIDao=testDIDao;
}
……}《JavaEE框架整合开发入门到实战》陈恒
主编,清华大学出版社2.将TestDIServiceImpl1类托管给Spring将service.TestDIServiceImpl1类托管给Spring,让Spring创建其对象。同时,调用TestDI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙大城市学院《微积分》2021-2022学年第一学期期末试卷
- 浙大城市学院《内科护理》2021-2022学年第一学期期末试卷
- 浙大城市学院《建筑设备》2021-2022学年第一学期期末试卷
- 2024-2025学年高中历史第一单元中国古代的中央集权制度第1课夏商制度与西周封建课时作业含解析岳麓版必修1
- 2024-2025学年高中数学第1章计数原理1.2排列与组合1.2.2.2组合的综合应用练习新人教A版选修2-3
- 2025版高考生物一轮复习第4章细胞的物质输入和输出1物质跨膜运输的实例和生物膜的流动镶嵌模型练习含解析新人教版必修1
- 肇庆学院《写意花鸟实践教学》2022-2023学年第一学期期末试卷
- 肇庆学院《食品分析实验》2023-2024学年第一学期期末试卷
- 江西省第二届乡村振兴职业技能大赛各项目技术文件-汽车维修工
- 长沙医学院《细菌学检验》2021-2022学年第一学期期末试卷
- 放射诊疗专项监督检查表格
- 施工排架安全验收表
- 水泥稳定土类基层施工工艺标准(路拌法与厂拌法)
- GB_T 36873-2018 原种鸡群禽白血病净化检测规程(高清正版)
- 模具常用语中英文对照
- 不锈钢的车削加工
- 城市轨道交通综合监控试题A
- 全自动血液细菌培养分析仪校准规范(实验报告)
- 常见矿物名称及相关信息汇总
- 盘式制动器设计计算
- 农业农村局工作人员绩效考核办法
评论
0/150
提交评论