zoukankan      html  css  js  c++  java
  • Spring.NET学习笔记(1)基本依赖注入

         不学Spring,系统照样能跑,学会了Spring会发现跟没学会之前也多大差别,一直在用Spring以后就会感觉不用Spring写程序就好像无从下手,Spring就是一容器,用以组装程序而用。

    一.依赖注入

    分三种方式

    (1)构造注入

    <object id="foo" type="X.Y.Foo, Example">
      <constructor-arg ref="bar"/>
      <constructor-arg ref="baz"/>
    </object>
    
    <object id="bar" type="X.Y.Bar, Example"/>
    <object id="baz" type="X.Y.Baz, Example"/>


    (2)Setter属性注入

    <object id="exampleObject" type="Examples.ExampleObject, ExamplesLibrary">
    
      <!-- setter injection using the ref attribute -->
      <property name="objectOne" ref="anotherExampleObject"/>
      <property name="objectTwo" ref="yetAnotherObject"/>
      <property name="IntegerProperty" value="1"/>
    </object>
    
    <object id="anotherExampleObject" type="Examples.AnotherObject, ExamplesLibrary"/>
    <object id="yetAnotherObject" type="Examples.YetAnotherObject, ExamplesLibrary"/>


    (3)方法注入

    3.1

    public class TestObjectFactory
    {
        public const string TheName = "Old Goriot";
        public const int TheAge = 78;
    
        public virtual object GetObject()
        {
            return new TestObject(TheName, TheAge);
        }
    }
    <object id='factory' type='Spring.Objects.Factory.Support.TestObjectFactory, Spring.Core.Tests'>
      <lookup-method name='GetObject' object='target'/>
    </object>
    <object id='target' type='Spring.Objects.TestObject, Spring.Core.Tests' singleton='false'>
      <property name='name' value='Fiona Apple'/>
      <property name='age' value='47'/>
    </object>


    3.2方法替换

    public class MyValueCalculator
    {
    
        public virtual string ComputeValue(string input)
        {
            // ... some real code
        }
    
        // ... some other methods
    }
    public class ReplacementComputeValue : Spring.Objects.Factory.Support.IMethodReplacer
    {
        public object Implement(object target, MethodInfo method, object[] arguments)
        {
            // get the input value, work with it, and return a computed result...
            string value = (string)arguments[0];
            // compute...
            return result;
        }
    }

    MyValueCalculator 的ComputeValue方法替换成,实现IMethodReplacer 接口的Implement方法

    <object id="myValueCalculator" type="Examples.MyValueCalculator, ExampleAssembly">
      <!-- arbitrary method replacement -->
      <replaced-method name="ComputeValue" replacer="replacementComputeValue">
        <arg-type match="String"/>
      </replaced-method>
    </object>
    
    <object id="replacementComputeValue" type="Examples.ReplacementComputeValue, ExampleAssembly"/>

    这个方法明显很变态,完全破坏了封装,一般很少用
  • 相关阅读:
    [USACO07JAN]平衡的阵容Balanced Lineup
    洛谷 P4389 付公主的背包 解题报告
    多项式Ⅱ
    半平面交 板子
    Problem C Dist 解题报告
    二维凸包的板子
    洛谷 P4841 城市规划 解题报告
    广二模拟赛 Problem A: 青春野狼不做理性小魔女的梦 解题报告
    CF 997E 解题报告
    洛谷 P4244 [SHOI2008]仙人掌图 II 解题报告
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1553474.html
Copyright © 2011-2022 走看看