zoukankan      html  css  js  c++  java
  • spring mvc 学习指南一

    Spring框架

    依赖注入技术,作为代码可测试性的一个解决方案已经被广泛应用,很多人在使用中并不区分依赖注入和控制反转(IOC)

    简单来说,依赖注入的情况如下,有两个组件A和B,A依赖与B。假定A是一个类,且A有一个方法importantMethod使用到B,如下

    [java] view plain copy print?
    public class A {  
        public  void importantMethod(){  
            B b = ...//get an instance of B  
            b.usefulMethod();  
        }  
    }        

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

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

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

    [java] view plain copy
     
     print?
    public class A {  
        private B b;  
      
        public void importantMethod() {  
            // no nedd to worry about creating b anymore  
            // B b = ...//get an instance of B  
            b.usefulMethod();  
        }  
        public void setB(B b) {  
            this.b = b;  
        }  
    }  

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

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

    [java] view plain copy print?
    public class A {  
        private B b;  
        public A (B b){  
            this.b=b;  
        }  
        public void importantMethod() {  
            // no nedd to worry about creating b anymore  
            // B b = ...//get an instance of B  
            b.usefulMethod();  
        }  
    }  

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

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

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

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

    [java] view plain copy print?
    context = new ClassPathXmlApplicationContext(new String[]{"config1.xml","config2.xml"});  
        //可以通过调用ApplicationContext的getBean方法获得对象。  
        context.getBean("a",A.class);  
        //getBean方法会查询id为a且类型那个为A的bean对象,  

    1.1 XML配置文件

    从1.0版本开始,spring就支持基于xml的配置,从2.5版本开始,增加了通过注解的配置支持,配置文件的根元素通常为

    [html] view plain copy print?
    <span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?>  
    <beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
      
        xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">  
      
        。。。。。  
      
    </beans></span>  

    如果需要跟江的Spring配置能力,可以在schema location 属性中添加相应的schema。配置文件可以是一份,也可以分解为多份,已支持模块化配置,ApplictionContext的实现类支持读取多份配置文件。另一种选择是,通过一份主配置文件,将该文件导入到其他的配置文件。下面是一个导入配置文件的示例。

    [html] view plain copy print?
    <span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?>  
    <beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
      
        xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">  
      
        <import resource="config.xml" />  
        <import resource="module2/congif.xml" />  
        <import resource="/resources/config3.xml" />  
      
    </beans></span>  
     
  • 相关阅读:
    android studio 修改应用程序图标
    [AppDelegate window]: unrecognized selector sent to instance 0x600002b178e0
    Error compiling file: /private/var/folders/tm/rj18p_ls10lb_fsqfc7h4trm0000gn/T/jetty-0.0.0.0-8081-WebRoot-_-any-/jsp/org/apache/jsp/login_jsp.java
    mac下eclipse突然打不开了,直接停在启动页上不动
    iOS下收不到通知,或者只收到一个通知
    名词:箭头函数
    名词:硬编码
    keil5开发工具
    Android系统源码学习步骤 ,linux学习方向
    小白学习Spark系列一:Spark简介
  • 原文地址:https://www.cnblogs.com/Angella/p/6493078.html
Copyright © 2011-2022 走看看