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"/>

    这个方法明显很变态,完全破坏了封装,一般很少用
  • 相关阅读:
    ad_imh
    pc send instructor pc ad
    数据、模型、IT系统认知
    量化投资认知
    LinAlgError: Last 2 dimensions of the array must be square
    转:Hadoop大数据开发基础系列:七、Hive基础
    Run-Time Check Failure #2
    0x00007FFC8C5325E7 (ucrtbased.dll)处(位于 DataStructure.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。
    栈与后缀表达式C实现
    Jupyter使用
  • 原文地址:https://www.cnblogs.com/lauplay/p/2667480.html
Copyright © 2011-2022 走看看