zoukankan      html  css  js  c++  java
  • Spring.NET教程(六)——依赖对象的注入(基础篇)

    一、属性注入

      上篇我们简单提到依赖注入的用途。回顾一下所讲内容,发现在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; }
        }

      PersonDao

        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));
            }
        }

    App.config

    <?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>

      Program

        class Program
        {
            static void Main(string[] args)
            {
                IApplicationContext ctx = ContextRegistry.GetContext();
                PersonDao dao = ctx.GetObject("personDao") as PersonDao;
                dao.Get();
                Console.ReadLine();
            }
        }

      输出效果如下:

    Spring.NET教程(七)——依赖对象的注入(基础篇) 上 Level 200 

  • 相关阅读:
    VisualStudioCode网页开发常用插件
    java项目报错 :A class file was not written. The project may be inconsistent...
    java抽象类及接口
    博客园首页美化----js添加分割线
    WordPress安全/速度优化(此篇持续更新)
    wordpress宝塔lnmp下安装以及调优(此篇持续更新)
    wordpress之avada安装全过程(此篇持续更新)
    Wordpress之使用阿里云Oss存储
    Linux基础学习(一)虚拟机安装&CentOS8.1安装
    docker安装配置使用
  • 原文地址:https://www.cnblogs.com/millen/p/1635954.html
Copyright © 2011-2022 走看看