设为首页 加入收藏

TOP

Spring之依赖配置详解(一)
2015-07-20 17:14:13 来源: 作者: 【 】 浏览:6
Tags:Spring 依赖 配置 详解

通过以上的学习,对spring容器和DI的概念应该比较清晰了,DI(依赖注入)作为spring的核心,spring当然提供了一套完善的机制来进行依赖注入。前篇文章从概念上介绍了依赖注入,本篇着重学习spring依赖注入的方法,这里主要采用xml的方式。

基本注入

构造器注入和设值注入是依赖注入的两种主要方式,spring对此有很完善的实现,下面首先以代码的形式进行简要的说明。

构造器注入

Spring容器通过调用bean的构造函数(可能带有几个参数,每个参数代表一个依赖)完成构造器注入。通过静态工厂方法和调用构造器及其类似,这里一并进行说明。

Spring中构造器依赖注入采用以下的形式,每个参数用bean标签的子标签 < constructor-arg >进行配置:

    
  
       
   
.. .. ..
    
  

Index:在构造函数中参数的位置,从0开始 标签中的配置包含5个项,使用他们中的某些进行某个依赖的配置,简单的描述如下:

Value:参数值,通常是基本类型和 type或者index配合使用。

Name:构造函数中参数的名字

Ref:引用其他Spring管理的对象

Type:参数的类型,值为基本类型或者完全限定的类名。

基本Bean

下面采用代码加注释的形式分别对以上的配置项加以说明,引用的类库见以前的文章,首先是简单的代码结构截图:

\

Fruit

Apple、Banana是用来演示ref配置项的,只是一个简单的类,没有任何字段。Fruit包含一个Apple和一个Banana,其代码如下:

package com.test.wdi;
 
 
/**  
* @date 2015-2-27
* @Description:此类主要是为了说明构造器注入的ref项,包含了基本的构造函数,静态工厂方法,和实例工厂方法
*/
 
public class Fruit {
 
    private Apple apple;
   
    private Banana banana;
   
   
    public Fruit() {
       super();
    }
 
   
    /**  
    * 静态工厂方法
    */
    public static Fruit newInstance(Apple apple, Banana banana){
       return new Fruit(apple, banana);
    }
   
    /**  
    * 实例工厂方法
    */
    public Fruit  newInstance1(Apple apple, Banana banana){
       return new Fruit(apple, banana);
    }
   
    /**  
    * 传统带参构造函数
    */
    public Fruit(Apple apple, Banana banana) {
       super();
       this.apple = apple;
       this.banana = banana;
    }
 
    public Apple getApple() {
       return apple;
    }
 
    public void setApple(Apple apple) {
       this.apple = apple;
    }
 
    public Banana getBanana() {
       return banana;
    }
 
    public void setBanana(Banana banana) {
       this.banana = banana;
    }
 
    @Override
    public String toString() {
       return hashCode()+ "Fruit [apple=" + apple + ", banana=" + banana + "]";
    }
   
}

ExampleBean

ExampleBean是用来演示除ref之外的其他配置项的,它有连个基本类型的字段,其代码如下:

package com.test.wdi;
 
/**  
* @date 2015-2-28
* @Description:此类用来说明构造器注入配置项中的 name index type value的,为了方便重写了toString方法
*/
public class ExampleBean {
 
    private int years;
    private String ultimateAnswer;
   
    private boolean test;
   
  
    public ExampleBean() {
       super();
    }
 
    /**
     * 构造函数2,和构造函数1一样具有两个参数,如果bean配置中不加入type的限制,
     * 将会有和预期不一致的结果
     */
    public ExampleBean(int years, boolean test) {
        this.years = years;
        this.test = test;
    }
   
   
    /**
     * 构造函数1
     */
    public ExampleBean(int years, String ultimateAnswer) {
        this.years = years;
        this.ultimateAnswer = ultimateAnswer;
    }
   
   
 
    @Override
    public String toString() {
       return "ExampleBean [years=" + years + ", ultimateAnswer=" + ultimateAnswer + ", test=" + test + "]";
    }
 
   
}

BeanXMl配置

Bean的配置,将依次说明 标签中每个配置属性的简单用法和它们的组合。bean配置包含连个文件,allbean.xml是主配置文件,它通过import标签引入t1.xml,而t1.xml包含了所有的配置信息,且有详细的注释:

  

  
 
    
   
   
   
    
   
    
   
   
   

  

  

  
 
    
   
    
    
   
       
   
   
    
    
   
    
   
    
    
     
     
   
   
    
   
    
    
     
     
   
    
   
    
    
     
     
   
   
    
   
    
    
     
     
   
    
    
     
     
   
   
    
   
    
    
     
     
   
    
   
    
    
     
     
   
    
   
   
    
    
     
     
   

  

测试程序

测试程序使用main函数,依次打印出来t1中定义的那些bean,代码如下:

package com.test;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
/**  
 * @Description:
 * 本示例例环境为eclipse
 */
public class TestMain {
    public static void main(String[] args) {
       /**
        * ApplicationContext代表spring容器,而ClassPathXmlApplicationContext是它的一个实现,它从类路径下读取相应的
        *  xml 元数据配置,并初始化容器。其中allbean.xml是相应的元数据配置
        */
       ApplicationContext context = new ClassPathXmlApplicationContext("allbean.xml");
      
       //依次打印对象
       System.out.println(context.getBean("f1"));
       System.out.println(context.getBean("f2"));
       System.out.println(context.getBean("f3"
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDOJ题目2454 Degree Sequence of.. 下一篇[LeetCode]132.Palindrome Partit..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·【C语言】动态内存管 (2025-12-27 06:23:20)
·C语言中的内存管理 - (2025-12-27 06:23:16)
·C语言指南:C语言内 (2025-12-27 06:23:14)
·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)