设为首页 加入收藏

TOP

Spring之依赖配置详解(二)
2015-07-20 17:14:13 来源: 作者: 【 】 浏览:8
Tags:Spring 依赖 配置 详解
)); System.out.println(context.getBean("exam1a")); System.out.println(context.getBean("exam1b")); System.out.println(context.getBean("exam2")); System.out.println(context.getBean("exam3")); System.out.println(context.getBean("exam4")); } }

测试结果如下截图,均符合预期:

\

注:构造器注意需要注意循环依赖的问题。

设值注入

设值注入是spring容器在调用过无参构造函数或者无参工厂方法后,然后通过调用其setter方法进行依赖的注入。

Set注入比较简单,之前的文章spring容器和配置初识所举的例子就是setter注入。下面是一段xml配置极其说明:

  
    
  
        
   
        
   
    
  

依赖注入实例

依赖有多种类型,包含基本类型(int、double、string等)和复杂类型(系统类和自定义的类),下面依次说明它们在注入过程中需要注意的问题。

设置注入和构造器注入对应的标签分别是 它们的子标签的意义保持一致,下面的例子一般情况下,只做其中一种的说明。另外它们的属性除了 单独拥有的type和 index 其他的也保持一致的意义。

直接类型(原始类型、字符串等)

直接类型直接使用value子标签或者属性配置即可。Spring的conversion service 会自动把字符串转化为真正的属性(属性或者构造函数参数)。

对应设置注入,由javabean规范和name属性可以准确的确定类型,故转换不存在问题。但是对于构造器注入,如果不对type或者name进行限制,可能会产生非预期结果。

如下一段配置实是上文中构造器中的一个片段,另外增加了设置注入加以比较。运行结果可以自行测试:

  
   
 
    
  
       
   
       
   
    
  
    
  
       
   
       
   
    
  
    
  
   
    
  
       
   
       
   
       
   
    
  


另外类型为java.util.properties可以采用类似下面的配置:

  
 
    
   
    
    
    
      jdbc.driver.className=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mydb 
     
   

  

Idref标签

Idref子标签只是一个把某个bean的id传递作为依赖传递给另外一个bean的防止错误的方式。通过只传递bean的id,可以构建构建更加灵活的程序。

基本的配置如下:

  
    
  
        
   
        
    
    
   
        
   
    
  
    
  
        
   
        
    
   
        
   
    
  

引用其他bean

引用其他bean是spring中及其常见的场景,这种配置通过 的子标签 实现,或者通过ref属性(实质上是子标签的一种缩写)。而子标签的形式提供了更具体的用法和配置。

基本样式如下:

或者

以上两者的区别是:前者在当前spring容器和父容器中寻找id(name)为someBean 的对象,而后者只在父容器中寻找。

而ref属性是前者的简写。

下面看具体的例子:


  
    
  
       
    
     
   
       
    
     
   
    
  
    
  
       
    
   
       
   
    
  

内部bean

内部定义的bean称之为内部bean,spring会自动忽略其id、name 属性和 scope属性,配置如下:

  
    
  
       
    
     
   
       
    
     
   
    
  

集合

Java的强大之处之一在于jdk提供了强大的集合框架,spring当然提供了注入集合的方法。

自从java1.5开始,支持泛型,我们的集合尽量使用泛型,另外关于集合合并涉及到bean定义的继承,这里暂不讨论。

首先引入一个带集合属性的bean,省略了构造函数和get set方法。

public class FruitCollection {
 
    private Set
  
    fruits;
    private List
   
     fruitList; private Map
    
      fruitMap; private Properties ppp; }
    
   
  

具体见下面的配置代码:

  
    
  
       
    
     
     
      
       
       
       
      
      
      
      
      
      
      
      
     
   
 
       
    
     
     
      
       
       
       
      
      
      
      
      
      
      
      
     
   
 
       
    
     
     
      
      
      
       
   
 
       
    
     
     
     
      t1
      
     
      t2
      
     
      t3
      
     
      t4
      
     
   
    
  

Null和空串

Spring支持注入null和字符串的空串,见如下的配置:

  
    
  
        
   
       
    
     
   
       
   
    
  
   
    
  
         
   
       
    
   
       
   
    
  

实际相当于分别执行了如下方法:

setUltimateAnswer(null);
setUltimateAnswer("");

缩写

Spring的bean配置文件的格式除了以上用了多次的标准形式,还有一些简单的缩略形式,这些缩略形式是基于xml命名空间,分别是p-nameplace和c-nameplace,依次对应seter注入和 构造器注入。

这里不再赘述。直接贴一个spring官方文档的示例来说明p命名空间:

  
 
    
    
     
   
 
    
   

  

复合属性名

嵌套的注入,fruit 有个apple属性,假设apple 有个 color属性。那么可以在fruit的定义中直接为color注入属性,前提是apple不为null:

    
  
    
  
        
   
        
   
    
  

结束

本文从spring两种依赖注入讲起,然后举出具体的配置例子依次讲解到了大部门的注入实例,本文中大部分的例子均通过测试,环境为spring4.1.5。但本人水平有限,肯定有很多不当和不完整支持,期待共同进步,本文中的实例用到的代码地址为:本文资源下载地址(免积分)

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDOJ题目2454 Degree Sequence of.. 下一篇[LeetCode]132.Palindrome Partit..

评论

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

·有没有哪些高效的c++ (2025-12-27 08:20:57)
·Socket 编程时 Accep (2025-12-27 08:20:54)
·计算机网络知识点总 (2025-12-27 08:20:52)
·一篇说人话的文章, (2025-12-27 07:50:09)
·Python Web框架哪家 (2025-12-27 07:50:06)