现在的位置: 首页 > 综合 > 正文

Spring.NET学习笔记7——依赖对象的注入(基础篇) Level 200

2013年12月06日 ⁄ 综合 ⁄ 共 3412字 ⁄ 字号 评论关闭
 

  一、属性注入

  上篇我们简单提到依赖注入的用途。回顾一下所讲内容,发现在object
节点下使用了<
property 
name
="Tool"
 ref
="computer"
/>
。而property 
标签正是用来属性注入的。而ref
是用来标识是关联到哪个object
。而name
属性是指属性名。如下:<
object 
id
="modernPerson"
 type
="SpringNetIoC.ModernPerson, SpringNetIoC"
>

        

<
property 
name
="Tool"
 ref
="computer"
/>


</
object
>

值类型的注入是需要使用property 
节点的

value
属性。如
<
property

name
="Name"
value
="Liu Dong"/>

作为内联类型可以使用如下:

<
property
name
="Friend">

          <
object
type
="SpringNetDi.Person, SpringNetDi"/>

</
property>

同理,内联类型可以是循环引用的对象(见代码处)。

  
二、构造函数注入

构造器注入使用
constructor-arg
标签作为标识。同样具有于属性注入相同的方式,使用name

ref

value
作为构造器注入的属性,如下:

<
constructor-arg
name
="argPerson"
ref
="person"/>

<
constructor-arg
name
="intProp"
value
="1"/>



 


  程序的代码如下:



    
public
 
class
 Person

    


{

        

public
 
string
 Name 


get

set
; }



        

public
 
int
 Age 


get

set
; }



        

public
 Person Friend 


get

set
; }



    }


 



    
public
 
class
 PersonDao
    {

        
private
 Person argPerson;
        

private
 
int
 intProp;

        
public
 PersonDao(Person argPerson, 
int
 intProp)
        {
            

this
.argPerson 
=
 argPerson;
            

this
.intProp 
=
 intProp;
        }

        
public
 
void
 Get()
        {
            

//
构造函数注入的整型参数


            Console.WriteLine(
string
.Format(
"
intProp:{0}
"
, intProp));

            
//
构造函数注入的Person


            Console.WriteLine(
string
.Format(
"
argPerson Name:{0}
"
, argPerson.Name));
            Console.WriteLine(

string
.Format(
"
argPerson Age:{0}
"
, argPerson.Age));

            
//
内联对象Friend


            Console.WriteLine(
string
.Format(
"
argPerson Friend Name:{0}
"
, argPerson.Friend.Name));
            Console.WriteLine(

string
.Format(
"
argPerson Friend Age:{0}
"
, argPerson.Friend.Age));

            
//
内联对象的循环引用


            Console.WriteLine(
string
.Format(
"
argPerson Friend Friend Name:{0}
"
, argPerson.Friend.Friend.Name));
            Console.WriteLine(

string
.Format(
"
argPerson Friend Friend Age:{0}
"
, argPerson.Friend.Friend.Age));
        }
    }


 



<?
xml version="1.0" encoding="utf-8" 
?>


<
configuration
>

  
<
configSections
>

    

<
sectionGroup 
name
="spring"
>

      

<
section 
name
="context"
 type
="Spring.Context.Support.ContextHandler, Spring.Core"
 
/>

      

<
section 
name
="objects"
 type
="Spring.Context.Support.DefaultSectionHandler, Spring.Core"
 
/>

    

</
sectionGroup
>

  

</
configSections
>

  
<
spring
>

    
<
context
>

      

<
resource 
uri
="config://spring/objects"
 
/>

    

</
context
>

    
<
objects 
xmlns
="http://www.springframework.net"
>

      
<
object 
id
="person"
 type
="SpringNetDi.Person, SpringNetDi"
>

        

<!--
属性值类型注入
-->

        

<
property 
name
="Name"
 value
="Liu Dong"
/>

        

<
property 
name
="Age"
 value
="27"
/>

        
<!--
内联对象注入
-->

        

<
property 
name
="Friend"
>

          

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

            

<
property 
name
="Name"
 value
="Beggar"
/>

            

<
property 
name
="Age"
 value
="23"
/>

            

<
property 
name
="Friend"
 ref
="person"
/>

          

</
object
>

        

</
property
>

        
      

</
object
>

      
<
object 
id
="personDao"
 type
="SpringNetDi.PersonDao, SpringNetDi"
>

        

<!--
构造器注入
-->

        

<
constructor-arg 
name
="argPerson"
 ref
="person"
/>

        

<
constructor-arg 
name
="intProp"
 value
="1"
/>

        
      

</
object
>

    
</
objects
>

  
</
spring
>


</
configuration
>



 

 



    
class
 Program

    


{

        

static
 
void
 Main(
string
[] args)

        


{

            IApplicationContext ctx 

=
 ContextRegistry.GetContext();


            PersonDao dao 

=
 ctx.GetObject(
"
personDao
"

as
 PersonDao;

            dao.Get();


            Console.ReadLine();

        }




    }



 

  输出效果如下:

 

 

 

 

 

 代码下载

 

 

  返回目录

抱歉!评论已关闭.