荣新IT培训中心
全国咨询热线:400-1335-066
您现在的位置:首页>行业新闻 > 正文

java培训 XML配置文件

时间:2017-10-06 16:33:00 来源:荣新IT教育培训 作者:荣新科技

近几年选择参加java培训的人越来越多,荣新教育小编带你学java,每天学一点,一年成为java编程高手。

java培训

第1章 Spring框架

Spring框架是一个开源的企业应用开发框架,作为一个轻量级的解决方案,它包含20多个不同的模块。本书主要关注Core、Spring Bean、Spring MVC和Spring MVC Test模块。

本章主要介绍Core和Spring Bean这两个模块,以及它们如何提供依赖注入解决方案。为方便初学者,本书会深入讨论依赖注入概念的细节。后续介绍开发MVC应用的章节将会使用到本章介绍的技能。

依赖注入

在过去数年间,依赖注入技术作为代码可测试性的一个解决方案已经被广泛应用。实际上,Spring、谷歌Guice等框架都采用了依赖注入技术。那么,什么是依赖注入技术?

很多人在使用中并不区分依赖注入和控制反转(IoC),尽管Martin Fowler在其文章中已分析了两者的不同:


  1. http://martinfowler.com/articles/injection.html 

简单来说,依赖注入的情况如下。

有两个组件A和B,A依赖于B。假定A是一个类,且A有一个方法importantMethod用到了B,如下:


  1. public class A {  
  2. public void importantMethod() {  
  3. b = ... // get an instance of B  
  4. b.usefulMethod();  
  5. ...  
  6. }  
  7. ...  

要使用B,类A必须先获得组件B的实例引用。若B是一个具体类,则可通过new关键字直接创建组件B实例。但是,如果B是接口,且有多个实现,则问题就变得复杂了。我们固然可以任意选择接口B的一个实现类,但这也意味着A的可重用性大大降低了,因为无法采用B的其他实现。

依赖注入是这样处理此类情景的:接管对象的创建工作,并将该对象的引用注入需要该对象的组件。以上述情况为例,依赖注入框架会分别创建对象A和对象B,将对象B注入到对象A中。

为了能让框架进行依赖注入,程序员需要编写特定的set方法或者构建方法。例如,为了能将B注入到A中,类A会被修改成如下形式:


  1. public class A {  
  2. private B b;  
  3. public void importantMethod() {  
  4. // no need to worry about creating B anymore  
  5. // B b = ... // get an instance of B  
  6. b.usefulMethod();  
  7. ...  
  8. }  
  9. public void setB(B b) {  
  10. this.b = b;  
  11. }  

修改后的类A新增了一个set方法,该方法将会被框架调用,以注入B的一个实例。由于对象依赖由依赖注入,类A的importantMethod方法不再需要在调用B的usefulMethod方法前去创建B的一个实例。

当然,也可以采用构造器方式注入,如下所示:


  1. public class A {  
  2. private B b;  
  3.  
  4. public A(B b) {  
  5. this.b = b;  
  6. }  
  7.  
  8. public void importantMethod() {  
  9. // no need to worry about creating B anymore  
  10. // B b = ... // get an instance of B  
  11. b.usefulMethod();  
  12. ...  
  13. }  

本例中,Spring会先创建B的实例,再创建实例A,然后把B注入到实例A中。

注:

Spring管理的对象称为beans。

通过提供一个控制反转容器(或者依赖注入容器),Spring为我们提供一种可以“聪明”地管理Java对象依赖关系的方法。其优雅之处在于,程序员无需了解Spring框架的存在,更不需要引入任何Spring类型。

从1.0版本开始,Spring就同时支持setter和构造器方式的依赖注入。从2.5版本开始,通过Autowired注解,Spring支持基于field方式的依赖注入,但缺点是程序必须引入org.springframework.beans.factory.annotation.Autowired,这对Spring产生了依赖,这样,程序无法直接迁移到另一个依赖注入容器间。

市场需求大,Java培训越好越火。使用Spring,程序几乎将所有重要对象的创建工作移交给Spring,并配置如何注入依赖。Spring支持XML或注解两种配置方式。此外,还需要创建一个ApplicationContext对象,代表一个Spring控制反转容器,org.springframework.context.ApplicationContext接口有多个实现,包括ClassPathXmlApplicationContext和FileSystemXmlApplicationContext。这两个实现都需要至少一个包含beans信息的XML文件。ClassPathXmlApplicationContext尝试在类加载路径中加载配置文件,而FileSystemXmlApplicationContext则从文件系统中加载。

下面是从类路径中加载config1.xml和config2.xml的ApplicationContext创建的一个代码示例。


  1. ApplicationContext context = new ClassPathXmlApplicationContext(  
  2. new String[] {"config1.xml", "config2.xml"}); 

可以通过调用ApplicationContext的getBean方法获得对象。


  1. Product product = context.getBean("product", Product.class); 

getBean方法会查询id为product且类型为Product的bean对象。

注:

理想情况下,我们只需在测试代码中创建一个ApplicationContext,应用程序本身无需处理。对于Spring MVC应用,可以通过一个Spring Servlet来处理ApplicationContext,而无需直接处理。

1.1 XML配置文件

从1.0版本开始,Spring就支持基于XML的配置;从2.5版本开始,增加了通过注解的配置支持。下面介绍如何配置XML文件。配置文件的根元素通常为beans:


  1. < ?xml version="1.0" encoding="UTF-8"?> 
  2. < beans xmlns="http://www.springframework.org/schema/beans" 
  3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.  xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.  http://www.springframework.org/schema/beans/spring-beans.xsd"> 
  6.  
  7. ...  
  8. < /beans> 

如果需要更强的Spring配置能力,可以在schema location属性中添加相应的schema,也可以指定schema版本:


  1. http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 

不过,笔者推荐使用默认schema,以便升级spring库时无需修改配置文件。

配置文件既可以是一份,也可以分解为多份,以支持模块化配置。ApplicationContext的实现类支持读取多份配置文件。另一种选择是,通过一份主配置文件,将该文件导入到其他配置文件。

下面是导入其他配置文件的一个示例:


  1. < ?xml version="1.0" encoding="UTF-8"?> 
  2. < beans xmlns="http://www.springframework.org/schema/beans" 
  3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.  xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.  http://www.springframework.org/schema/beans/spring-beans.xsd"> 
  6.  
  7. < import resource="config1.xml"/> 
  8. < import resource="module2/config2.xml"/> 
  9. < import resource="/resources/config3.xml"/> 
  10.  ...  
  11. < /beans> 

bean元素的配置后面将会详细介绍。

荣新科技十年沉淀提供java培训,行业独家领先的课程,高薪就业不是梦!