Spring.NET依赖注入(二) - 对象的注入

1. 抽象注入接口

public interface IDeviceWriter
    {
        void saveToDevice();
    }

 

2. 接口的具体实现

  实现1

public class FloppyWriter : IDeviceWriter
    {
        public void saveToDevice() 
        {
            Console.WriteLine("储存至软盘…");
        }
    }

 

  实现2

public class UsbDiskWriter : IDeviceWriter
    {
        public void saveToDevice() 
        {
            Console.WriteLine("储存至移动硬盘…");
        }
    }

 

3. 需要注入的业务对象

public class MemoryDevice
    {
        public IDeviceWriter DeviceWriter { get; set; }

        public void Save()
        {
            if (DeviceWriter == null)
            {
                throw new Exception("需要设备...");
            }

            DeviceWriter.saveToDevice();
        }
    }

 

4. 业务调用组件

public class DeviceComponent
    {
        public static void SaveDevice()
        {
            try
            {
                //从config文件中取得程序集信息
                IApplicationContext context = ConfigurationManager.GetSection("spring/context") as IApplicationContext;

                //调用方法
                MemoryDevice device = context.GetObject("algDevice") as MemoryDevice;
                device.Save();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }

 

5. 客户端调用

class SpringDeviceTest : ITestCase
    {
        public void Run()
        {
            DeviceComponent.SaveDevice();

            Console.Read();
        }
    }

 

6. 配置文件

<configuration>
  <configSections>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
    </sectionGroup>
  </configSections>

  <spring>
    <context>
      <resource uri="config://spring/objects"/>
    </context>
    
    <objects>
     ...
     <object id="algFloppy" type="CsharpTrainer.Strategy.Device.FloppyWriter, CsharpTrainer.Strategy" />
      <object id="algUsb" type="CsharpTrainer.Strategy.Device.UsbDiskWriter, CsharpTrainer.Strategy" />
      <object id="algDevice" type="CsharpTrainer.Strategy.Device.MemoryDevice, CsharpTrainer.Strategy">
        <property name="DeviceWriter" ref="algFloppy" />
        <!--<property name="DeviceWriter" ref="algUsb" />-->
      </object>
    </objects>
  </spring>
  ...
</configuration>

 

7. 运行结果

  储存至软盘…

 

时间: 2024-07-29 13:19:19

Spring.NET依赖注入(二) - 对象的注入的相关文章

php中sql注入漏洞示例 sql注入漏洞修复_php实例

在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符.通常,用户可以通过以下接口调用数据库的内容:URL地址栏.登陆界面.留言板.搜索框等.这往往给骇客留下了可乘之机.轻则数据遭到泄露,重则服务器被拿下.  一.SQL注入的步骤 a)  寻找注入点(如:登录界面.留言板等) b)  用户自己构造SQL语句(如:' or 1=1#,后面会讲解) c)  将sql语句发送给数据库管理系统(DBMS) d)  DBMS接收请求,并将该请求解释成机器代码指令,执行必要的存取操作 e)  DBMS

pring配置+依赖注入-Ehcache的Spring配置依赖注入问题

问题描述 Ehcache的Spring配置依赖注入问题 Spring在依赖注入配置时,注入的对象的类型需要同接收的参数类型相同才能注入成功的. 但是在Ehcache的注入时,我发现类型不匹配,却能注入成功. 小弟愚昧,还请多多指教.具体配置如下: Spring的bean.xml配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframew

Java Spring各种依赖注入注解的区别

Spring对于Bean的依赖注入,支持多种注解方式: @Resource  javax.annotation  JSR250 (Common Annotations for Java)    @Inject  javax.inject  JSR330 (Dependency Injection for Java)    @Autowired  org.springframework.bean.factory  Spring  直观上看起来,@Autowired是Spring提供的注解,其他几个

ssh整合-SSH框架中Spring的依赖注入问题

问题描述 SSH框架中Spring的依赖注入问题 我做了一个struts+hibernate3+spring的整合,我applicationContext .xml文件中已经配置了 <bean id=""loginAction"" class=""com.web.LoginAction""><property name=""userDao"" ref="&qu

Spring DI[依赖注入]

依赖注入(Dependency Injection,简称DI)意思是由容器或者框架将被调用类注入给调用对象,以此来降低调用对象和被调用类之间的依赖关系. 依赖注入主要有2种不同的实现形式: 1. 构造函数注入(Constructor Injection) 2. 设值注入(Setter Injection) 1.构造函数注入 通过调用类的构造函数,并将被调用类当做参数传递给构造函数,以此实现注入. example: public class UserImpl implements UserDao

基于spring与mockito单元测试Mock对象注入

1.关键词 单元测试.spring.mockito 2.概述 单元测试目前已经成为项目中保证代码质量的一种必要方法,对于一些不易构造或者不易获取的对象通过mock的方式进行测试是一种很有效的处理办法.在基于spring的mock测试中,mock对象获取和使用的便利性可以提升单元测试代码的质量. 3.实现原理 Mock对象的注入使用注解和反射,对象注入依赖spring框架支持junit4提供的TestExcutionListeners监听器对象,在监听器中将mock对象注入到单元测试类中. 4.新

详析Spring中依赖注入的三种方式_java

前言 平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. 在Sprin

spring构造方法依赖注入参数问题

问题描述 spring构造方法依赖注入privateLimitProcessor(Stringname){super(name);}<beanid="limitPro"class="chainofresponsibility.LimitProcessor"><constructor-argname="name"value="123"></constructor-arg></bean&g

Spring 与依赖注入

转载地址: http://wiki.jikexueyuan.com/project/java-web/01-00.html 依赖注入是反转控制的一种. 什么是反转控制? 我们平常写程序,需要什么对象,就在代码里显式地new一个出来然后使用,这是我们自己去控制对象的生成. 而反转控制是让Spring(或者类似的其他工具)帮忙去生成我们需要的对象,也就是说对象的生成的控制权交给Spring了. 当然,Spring需要依据一定的规则去生成对象,这个规则就在我们写的xml配置文件.或者代码中添加的注解之