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

    这个方法明显很变态,完全破坏了封装,一般很少用
  • 相关阅读:
    MySQL集群搭建(4)-MMM+LVS+Keepalived
    MySQL集群搭建(3)-MMM高可用架构
    MySQL集群搭建(2)-主主从模式
    MySQL集群搭建(1)-主备搭建
    MySQL 安装(二进制版)
    Nginx缓存了DNS解析造成后端不通--代理
    开启tcp_timestamps和tcp_tw_recycle造成NAT转发连接不上
    tcp_tw_recycle参数引发的故障
    记一次TIME_WAIT网络故障
    TCP服务端收到syn但是不回复syn ack问题分析
  • 原文地址:https://www.cnblogs.com/lauplay/p/2667480.html
Copyright © 2020-2023  润新知