构造函数注入

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>

运行结果:

构造函数注入

时间: 2024-11-29 01:50:08

构造函数注入的相关文章

Unity构造函数注入代码示例

Unity构造函数注入代码示例 如果使用 Unity 实例化一个类,该类的构造函数依赖一个或多个其他类,则 Unity 会为构造函数自动创建参数中指定的被依赖的类的实例.例如,下面的代码展示了一个名为 "CustomerService" 的类,其构造函数的入参依赖于一个名为 "LoggingService" 的类. public class CustomerService { public CustomerService(LoggingService log) {

IOC 构造函数注入vs属性注入

1.不管是构造函数注入还是属性注入,都要先把对象给new 出来,构造函数应该也是public.2.一般使用 配置文件,属性注入,不用使用特性,直接配置,初始化或依赖,凡是注入的,都要有访问权限,public.3.复杂的,一般 注册 构造函数和属性, 一起使用,配置一下就行,不用那么纠结.

spring中构造函数注入

spring中构造函数注入,简单来说,就是通过beans.xml中,设置对应的值.而且通过bean类中的构造函数进行注入这些值. 文件结构 Goods类 package com.test.innerbean; public class Goods { private String goodsName; private int price; public Goods(String name,int price) { goodsName=name; this.price=price; } publi

spring依赖注入之构造函数注入,set方法注入

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org

实现简单的构造函数注入容器

这段时间跟着Eleven老师学习收获不小,一些以前想过的可能,但是以前不知道怎么实现. 今天上班领导不在,突然想起来,便试着实现了一下诸如容器,发现 基本实现还是挺简单,基本就是反射的应用了.不废话,上代码. 首先是 容器的代码(新建一个类库封装): public class InjectContainer { private static Dictionary<string, object> dicToInstances = new Dictionary<string, object&

C#进阶系列——MEF实现设计上的“松耦合”(四):构造函数注入

前言:今天十一长假的第一天,本因出去走走,奈何博主最大的乐趣是假期坐在电脑前看各处堵车,顺便写写博客,有点收获也是好的.关于MEF的知识,之前已经分享过三篇,为什么有今天这篇?是因为昨天分享领域服务的时候,用到MEF的注入有参构造函数的方法,博主好奇心重,打算稍微深挖一下,这篇来对此知识点做个总结. 还是将前面三篇的目录列出来,对MEF没有了解的朋友,可以先看看: C#进阶系列——MEF实现设计上的“松耦合”(一) C#进阶系列——MEF实现设计上的“松耦合”(二) C#进阶系列——MEF实现设

Spring依赖注入构造器注入(通过构造函数注入)

在src目录下建立applicationContext.xml   (Spring 管理 bean的配置文件) <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

(spring-第3回)spring的依赖注入-属性、构造函数、工厂方法等的注入

Spring要把xml配置中bean的属性实例化为具体的bean,"依赖注入"是关卡.所谓的"依赖注入",就是把应用程序对bean的属性依赖都注入到spring容器中,由spring容器实例化bean然后交给程序员.spring的依赖注入有属性注入.构造函数注入.工厂方法注入等多种方式,下面用几个简单的栗子来一一道来. 一.首先是属性注入: 代码001 1 <?xml version="1.0" encoding="UTF-8&q

Spring——setter方式注入和构造函数方式注入

先写一个比较常见的结构: 其中UserDao跟UserManagerImpl是层与层之间的接口. 下面用这些类来演示setter方式注入跟构造函数注入来解决Manager层注入Dao问题. 一,setter方式注入 首先要在Manager实现类中定义Dao的私有成员变量,并为此变量添加set方法,注入的时候会自动调用这个set方法对成员变量进行赋值. 之后在配置文件中定义依赖关系: <beans xmlns="http://www.springframework.org/schema/be