Spring揭秘-xml配置文件的说明

Spring BeanFactory的xml配置文件的说明

  • spring2.0之前使用DTD文档声明



...

  • spring2.0以后在向前兼容的前提下又引入了XML Schema的文档声明


...

  • 是XML配置文件中最顶层的元素, 它下面可以包含0或者1个 和多个 以及 或者


    Paste_Image.png

标签的默认属性

  • default-lazy-init 。true 或 false ,默认值为 false 。用来标志是否对所有的 进行延迟初始化。
  • default-autowire 。取值为 no 、 byName 、 byType 、 constructor 以及 autodetect 。默认值为 no ,如果使用自动绑定的话,用来标志全体bean使用哪一种默认绑定方式。
  • default-dependency-check 。可以取值 none 、 objects 、 simple 以及 all ,默认值为 none ,即不做依赖检查。
  • default-init-method 。如果 按照某种规则,都有同样名称的初始化方法的话,可以在这里统一指定这个初始化方法名,而不用在每一个 上都重复单独指定。
  • default-destroy-method 。 与 default-init-method 相对应,如果所管辖的bean有按照某种规则使用了相同名称的对象销毁方法,可以通过这个属性统一指定。

  • 这三个标签不是必须的
  • 配置文件的描述信息
  • 在本配置文件中导入其他配置文件
  • 可以通过 为某些 起一些“外号”(别名)

构造方法注入


 
111111

< /bean>

   
  

setter方式注入

  • 有一个 name 属性, 用来指定该 将会注入的对象所对应的实例变量名称

  
    
  
  
    
  
< /bean>

中可用的配置项

  • 可以通过 value 为主体对象注入简单的数据类型

  111111


  222222

等效于



  • 。使用 ref 来引用容器中其他的对象实例,可以通过 ref 的 local 、 parent 和 bean 属性来指定引用的对象的 beanName 是什么
    • local 只能指定与当前配置的对象在同一个配置文件的对象定义的名称
      (可以获得XML解析器的 id 约束验证支持)
    • parent 则只能指定位于当前容器的父容器中定义的对象引用;

      a
      Paste_Image.png
    • bean 则基本上通吃,所以,通常情况下,直接使用bean来指定对象引用就可以了。

  

或者

  

或者

  

  • , 容器在解析配置的时候就可以帮你检查这个 beanName 到底是否存在,而不用等到运行时才发现这个 beanName 对应的对象实例不存在

  

  • 内部


  
  



  

< /bean>
  • 对应注入对象类型为 java.util.List 及其子类或者数组类型的依赖对象。
public class MockDemoObject
{
  private List param1;
  private String[] param2;
  ...
  // 相应的setter和getter方法
  ...
}
配置类似于

  
     something
    
    
  


  
    stringValue1
    stringValue2
  

  • 对应注入Java Collection中类型为 java.util.Set 或者其子类的依赖对象
public class MockDemoObject
{
private Set valueSet;
// 必要的setter和getter方法
...
}
配置类似于

  
     something
    
    
    
    ...
    
  

  • 对应注入 java.util.Map 或者其子类类型的依赖对象
public class MockDemoObject
{
private Map mapping;
// 必要的setter和getter方法
...
}
配置类似于

  
    
      something
    
    
      objectKey
      
    
    
      
        ...
      
    
     ...
  
< /property>

等效于

public class MockDemoObject
{
private Map mapping;
// 必要的setter和getter方法
...
}
配置类似于

  
    
    
    
    
      ...
    
    
    ...
  

  • 是简化后了的 ,或者说是特殊化的 map ,该元素对应配置类型为java.util.Properties 的对象依赖。因为 Properties 只能指定 String 类型的键(key)和值,所以, 的配置简化很多
public class MockDemoObject
{
  private Properties emailAddrs;
  // 必要的setter和getter方法
...
}
配置类似于

  
    [email protected]
    [email protected]
    ...
  

  • 一个空元素, 对于 String 类型来说,如果通过value以这样的方式指定注入,即 ,那么,得到的结果是 "" ,而不是 null, 所以,如果需要为这个string对应的值入 null 的话,请使用
public class MockDemoObject
{
  private String param1;
  private Object param2;
  // 必要的setter和getter方法
  ...
}
配置为

  


  

实际上就相当于
public class MockDemoObject
{
  private String param1=null;
  private Object param2=null;
  // 必要的setter和getter方法
  ...
}

depends-on

  • 前置依赖bean, 将configSetup,configSetup2,...等多个bean在ClassA实例之前实例
  • depends-on用来指定Bean初始化及销毁时的顺序



  • 参考: http://yanln.iteye.com/blog/2210723

autowire自动绑定

public class Foo
{
  private Bar emphasisAttribute;
...
// 相应的setter方法定义
}
public class Bar
{
  ...
}
那 么应该使用如下代码所演示的自动绑定定义,才能达到预期的目的:




  • byName: 按照类中声明的实例变量的名称,与XML配置文件中声明的bean定义的 beanName 的值进行匹配相匹配的bean定义将被自动绑定到当前实例变量上.
  • byType: byType根据其他bean的类型和当前bean属性的类型进行自动装配,若IOC容器中有一个以上的类型匹配的bean,则抛异常
  • constructor: constructor 类型则是针对构造方法参数的类型而进行的自动绑定, 功能与byType类似
public class Foo
{
  private Bar bar;
  public Foo(Bar arg)
  {
    this.bar = arg;
  }
  ...
}
相应配置为


< /bean>
  • autodetect: 这种模式是 byType 和 constructor 模式的结合体,如果对象拥有默认无参数的构造方法,容器会
    优先考虑 byType 的自动绑定模式。否则,会使用 constructor 模式


    Paste_Image.png
  • 如果想让系统中所有的 定义都使用 byType 模式的自动绑定,我们可以使用



...

lazy-init

  • 主要是可以针对 ApplicationContext 容器的bean初始化行为施以更多控制

你可能感兴趣的:(Spring揭秘-xml配置文件的说明)