构造函数注入
namespace SpringNetZhuru
{
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person Friend { get; set; }
}
}
namespace SpringNetZhuru
{
public class PersonDao
{
private Person argPerson;
private int inPro;
public PersonDao(Person argperson, int inPro)
{
this.argPerson = argperson;//参数argperson为配置文件中构造器name使用
this.inPro = inPro;
}
public void get()
{
//构造函数注入的整行参数
Console.WriteLine(string.Format("intPro:{0}", this.inPro));
//构造函数注入的Person
Console.WriteLine(string.Format("Person的Name:{0}", this.argPerson.Name));
Console.WriteLine(string.Format("Person的age:{0}", this.argPerson.Age));
//构造函数的注入的Person的Friend
Console.WriteLine(String.Format("Person的Friend的Name:{0}", this.argPerson.Friend.Name));
Console.WriteLine(String.Format("Person的Friend的Age:{0}", this.argPerson.Friend.Age));
//构造函数 注入的Person的Friend的Friend
Console.WriteLine(String.Format("Person的Friend的Friend的Name:{0}", this.argPerson.Friend.Friend.Name));
Console.WriteLine(String.Format("Person的Friend的Friend的Age:{0}", this.argPerson.Friend.Friend.Age));
}
}
}
两个类:Person和PersonDao
构造函数注入和属性注入一样使用name,ref ,value
配置文件:
<?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"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.net
http://www.springframework.net/xsd/spring-objects.xsd">
<description>一个简单的控制反转例子</description>
<object id="computer" type="SpringNetZhuru.NowPeopleTool,SpringNetZhuru"></object>
<object id="nowpeople" type="SpringNetZhuru.NowPeople,SpringNetZhuru">
<property name="Tool" ref="computer"></property>
</object>
<object id="person" type="SpringNetZhuru.Person,SpringNetZhuru">
<property name="Name" value="danche"></property>
<property name="Age" value="24"></property>
<property name="Friend">
<object type="SpringNetZhuru.Person,SpringNetZhuru">
<property name="Name" value="tanyidan"></property>
<property name="Age" value="24"></property>
<property name="Friend" ref="person"></property>
</object>
</property>
</object>
//构造器注入
<object id="persondao" type="SpringNetZhuru.PersonDao,SpringNetZhuru">
<constructor-arg name="argperson" ref="person"></constructor-arg>//此处name为PersonDao构造函数的Person类型参数,而不是属性
<constructor-arg name="inPro" value="1"></constructor-arg>//此处name为PersonDao构造函数的int 类型参数,而不是属性
</object>
</objects>
</spring>
</configuration>
运行结果: