zoukankan      html  css  js  c++  java
  • spring.net 对象创建

    多数情况下,容器会根据对象定义中的type属性值去直接调用相应类型的某个构造器。另外,还可以调用工厂方法来创建对象。(Spring.net中文手册)

    实例参考。

    (1)       Order

    namespace IocTest.Entities

    {

        public class Order

        {

            public int Unid { get; set; }

            public string OrderName { get; set; }

            public string UserId { get; set; }

     

            public override string ToString()

            {

                return OrderName + ":" + Unid;           

            }

        }

    }

     

    (一)   构造器

    使用构造器时,不要求对象的特定类型,只要声明对象的类型(assembly)就可以了。方法如下:

    1.指明对象类型 type="类全名,程序集名"

    2.有一个无参的构造函数或者默认构造函数。

     

    Xml

    <object id="orderConstructor" type="IocTest.Entities.Order"></object>

     

    Test

    [Test(Description="constructor test")]

    public void TestOrderConstructor()

    {

        Order oo = XmlFactory.GetObject("orderConstructor") as Order;

        oo.OrderName = "constructor create Test order name";

     

        Console.WriteLine(oo.ToString());

    }

     

     

    (二)   静态工厂

    使用静态工厂方法创建对象时,除了要将对象定义的type属性设为包含静态工厂方法的类型外,还要设置一个名为factory-method的属性来指定静态工厂方法的名称。(Spring.net中文手册)

     

         Xml

    <!-- static facotry order-->

      <object id="OrderFactoryStatic" type="IocTest.Entities.OrderFactory"

              factory-method="CreateStaticInstance">

      </object>

    此对象type指定的是静态工厂类型,此对象的作用即为静态创建Order

         OrderFactory

    namespace IocTest.Entities

    {

        public class OrderFactory

        {

            public static Order CreateStaticInstance()

            {

                return new Order();

            }

     

            public Order CreateInstance()

            {

                return new Order();

            }

        }

    }

     

         Test

    [Test(Description="static factory")]

    public void TestStaticFactory()

    {

         Order oo = XmlFactory.GetObject("OrderFactoryStatic") as Order;

        oo.OrderName = "static factory create Test order name";

     

         Console.WriteLine(oo.ToString());

    }

     

    (三)   实例工厂

    通过实例工厂方法创建对象与通过静态工厂方法创建对象的配置方式类似。此时,实例工厂方法所在的对象必须也要配置在同一容器(或父容器)中。

    如果要通过实例工厂方法创建对象,对象定义就不能包含type属性,而要用factory-object属性引用工厂方法所在的对象;注意,该属性值必须是包含工厂方法的对象的名称,且该对象必须定义在当前容器或父容器中。工厂方法的方法名则通过factory-method属性指定。(Spring.net中文手册)

     

         Xml

    <!-- factory order instance-->

      <object id="OrderFactorySample" type="IocTest.Entities.OrderFactory">   

      </object>

      <object id="OrderFactoryInstance"  type="IocTest.Entities.OrderFactory"

               factory-method="CreateInstance"

               factory-object="OrderFactorySample">

    </object>

     

         Test

    [Test(Description = "instance factory test")]

    public void TestInstanceFactory()

    {

       Order oo = XmlFactory.GetObject("OrderFactoryInstance") as Order;

       oo.OrderName = "instance factory create Test order name";

     

       Console.WriteLine(oo.ToString());

    }

     

    (四)   泛型类型

    与普通对象相同。但要注意的是左尖括号要以&lt;来代替,右尖括号不用。

    Score<T>

    namespace IocTest.Entities

    {

        public class Score<T>

        {

            public int Unid { get; set; }

            public List<T> ScoreList { get; set; }

     

            public override string ToString()

            {

                string strReturn = string.Empty;

                foreach (T t in ScoreList)

                    strReturn += t.ToString();

                return strReturn;

            }

        }

    }

     

         Xml

      <!--generic test-->

      <object id="Score" type="IocTest.Entities.Score&lt;int>">   

      </object>

     

         Test

    [Test]

    public void TestGenericScore()

    {

        Score<int> cc=XmlFactory.GetObject("Score") as Score<int>;

        List<int> _list = new List<int>() { 11,2,66,9,0};

        cc.ScoreList = _list;

     

    Console.WriteLine(cc.ToString());

    }

     

     转载请注明:博客园。

    博客园大道至简

    http://www.cnblogs.com/jams742003/

    转载请注明:博客园

  • 相关阅读:
    LeetCode 230. Kth Smallest Element in a BST
    LeetCode 114. Flatten Binary Tree to Linked List
    LeetCode 222. Count Complete Tree Nodes
    LeetCode 129. Sum Root to Leaf Numbers
    LeetCode 113. Path Sum II
    LeetCode 257. Binary Tree Paths
    Java Convert String & Int
    Java Annotations
    LeetCode 236. Lowest Common Ancestor of a Binary Tree
    LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/jams742003/p/1612521.html
Copyright © 2011-2022 走看看