Spring.NET学习笔记(2)-依赖注入细节

    你会发现学一个灵活的框架,往往是在学一些概念,而这些概念的技术构成都是基于xml的,就导致了我们得对着一堆的xml来看.试着配置完成让框架来解析。

1.构造注入细节constructor-arg

(1)与类构造函数参数一一对应原则,既然注入,肯定需要知道构造函数的参数

构造注入的关键字

<object id="foo" type="X.Y.Foo, Example">

  <constructor-arg ref="bar"/>

  <constructor-arg ref="baz"/>

</object>



<object id="bar" type="X.Y.Bar, Example"/>

<object id="baz" type="X.Y.Baz, Example"/>
(3)相关attribute

index指定参数索引
ref指定参数引用
<object id="rod2" type="Spring.Objects.Factory.Xml.ConstructorDependenciesObject, Spring.Core.Tests"

    autowire="constructor">

    <constructor-arg index="1" ref="kerry1"/>

    <constructor-arg index="0" ref="kerry2"/>

    <constructor-arg ref="other"/>

</object>

type显示指定参数类型
value指定简单类型值
name按参数命名指定
<object id="objectWithCtorArgValueShortcuts" type="Spring.Objects.TestObject, Spring.Core.Tests"

    singleton="false">

    <constructor-arg name="name" type="string" value="Rick" />

    <constructor-arg name="age" type="int" value="30" />

</object>


image


2.属性注入property
image 

与上面相似

3.直接属性写法

也可称为嵌套属性,特别是集合属性,是必须要这么写的,这也是xml标记写法的缺陷。只要去理解xml的特性就能理解其写法.

<constructor-arg type="bool" value="true"/>



<constructor-arg type="bool">

  <value>true</value>

</constructor-arg>


<property name="target">

  <object type="ExampleApp.Person, ExampleApp">

    <property name="name" value="Tony"/>

    <property name="age" value="51"/>

  </object>

</property>

<property name="myProperty">

  <value>hello</value>

</property>

<constructor-arg>

  <value>hello</value>

</constructor-arg>

<entry key="myKey">

  <value>hello</value>

</entry>



<property name="myProperty" value="hello"/>

<constructor-arg value="hello"/>

<entry key="myKey" value="hello"/>

4.集合属性(list, set, name-values and dictionary)
<property name="SomeList">

  <list>

    <value>a list element followed by a reference</value>

    <ref object="myConnection"/>

  </list>

</property>

<!--

  results in a call to the setter of the SomeDictionary (System.Collections.IDictionary) property

  -->

<property name="SomeDictionary">

  <dictionary>

    <entry key="a string => string entry" value="just some string"/>

    <entry key-ref="myKeyObject" value-ref="myConnection"/>

  </dictionary>

</property>

<!--

  results in a call to the setter of the SomeNameValue (System.Collections.NameValueCollection) property

  -->

<property name="SomeNameValue">

  <name-values>

    <add key="HarryPotter" value="The magic property"/>

    <add key="JerrySeinfeld" value="The funny (to Americans) property"/>

  </name-values>

</property>

<!-- 

  results in a call to the setter of the SomeSet (Spring.Collections.ISet) property 

  -->

<property name="someSet">

  <set>

    <value>just some string</value>

    <ref object="myConnection"/>

  </set>

</property>

4.1泛型集合支持

public class GenericExpressionHolder

   {

       private System.Collections.Generic.IList<IExpression> expressionsList;

       private System.Collections.Generic.IDictionary<string, IExpression> expressionsDictionary;



       public System.Collections.Generic.IList<IExpression> ExpressionsList

       {

           set { this.expressionsList = value; }

       }



       public System.Collections.Generic.IDictionary<string,IExpression> ExpressionsDictionary

       {

           set { this.expressionsDictionary = value; }

       }



       public IExpression this[int index]

       {

           get { return this.expressionsList[index]; }

       }



       public IExpression this[string key]

       {

           get { return this.expressionsDictionary[key]; }

       }

   }


<object id="genericExpressionHolder" type="Spring.Objects.Factory.Xml.GenericExpressionHolder, Spring.Core.Tests">

  <property name="ExpressionsList">

    <list element-type="Spring.Expressions.IExpression, Spring.Core">

      <value>1 + 1</value>

      <value>date('1974-8-24').Month</value>

      <value>'Aleksandar Seovic'.ToUpper()</value>

      <value>DateTime.Today > date('1974-8-24')</value>

    </list>

  </property>

  <property name="ExpressionsDictionary">

    <dictionary key-type="string" value-type="Spring.Expressions.IExpression, Spring.Core">

      <entry key="0">

        <value>1 + 1</value>

      </entry>

      <entry key="1">

        <value>date('1974-8-24').Month</value>

      </entry>

      <entry key="2">

        <value>'Aleksandar Seovic'.ToUpper()</value>

      </entry>

      <entry key="3">

        <value>DateTime.Today > date('1974-8-24')</value>

      </entry>

    </dictionary>

  </property>

</object>


4.2集合合并

<object id="parent" abstract="true" type="Example.ComplexObject, Examples">

  <property name="AdminEmails">

    <name-values>

      <add key="administrator" value="[email protected]"/>

      <add key="support" value="[email protected]"/>

    </name-values>

  </property>

</object>



<object id="child" parent="parent" >

  <property name="AdminEmails">

    <!-- the merge is specified on the *child* collection definition -->

    <name-values merge="true">

      <add key="sales" value="[email protected]"/>

      <add key="support" value="[email protected]"/>

    </name-values>

  </property>

</object>


结果是
[email protected]
[email protected]
[email protected]

5.空字符串值与Null

注意不同概念

<object type="Examples.ExampleObject, ExamplesLibrary">

  <property name="email" value=""/>

  <property name="email">

    <null/>

  </property>

</object>

你可能感兴趣的:(spring)