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

    这个方法明显很变态,完全破坏了封装,一般很少用
  • 相关阅读:
    一本通1269 有限背包
    python3 threading.Lock() 多线程锁的使用
    Sqlite3错误:Recursive use of cursors not allowed 的解决方案
    linux 常用命令
    90%的人说Python程序慢,5大神招让你的代码像赛车一样跑起来
    python3 使用flask连接数据库出现“ModuleNotFoundError: No module named 'MySQLdb'”
    Navicat Premium12远程连接MySQL数据库
    pymysql pymysql.err.OperationalError 1045 Access denied最简单解决办法
    CentOS7 安装MySQL8修改密码
    CentOS7 升级Openssl的办法
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1553474.html
Copyright © 2011-2022 走看看