Spring.NET通过几个专门的接口来控制容器中对象的行为。说到对象的行为无非就要提到对象的生命周期控制。类似在WinForm开发,Form生命周期中,Load方法为Form的载入方法和Dispose方法为Form的销毁方法。Spring.NET都能完美的实现这些需求。   

  一、生命周期接口

  在使用Spring.NET框架的时候通常遇到怎样初始化和销毁非托管资源(如数据库连接)的麻烦,下面的解决方案可能对您有所帮助。

  1.初始化行为

  继承Spring.Objects.Factory.IInitializingObject接口或者配置object节点的init-method属性,Spring.NET的IoC框架就会帮我们在该对象被实例后调用配置好的初始化方法。

  2.销毁行为

  继承System.IDisposable接口或者在object节点配置destroy-method属性,Spring.NET会帮我们在容器被销毁时调用它。

  实现代码:

  Person

    public class Person
    {
        public void Init()
        {
            Console.WriteLine("我长大了");
        }
        public void Destroy()
        {
            Console.WriteLine("我衰老了");
        }
    }
 
      <!--生命周期接口-->
      <object id="person" type="SpringNetProcessor.Person, SpringNetProcessor" 
              init-method="Init" destroy-method="Destroy" />

  二、抽象对象定义和子对象定义

  对象定义可能会包含大量的信息,比如与容器相关的信息(即初始化方法、静态工厂方法名等)、构造器参数和属性值等。子对象定义是指从一个父对象定义中继承了配置数据的对象定义。子对象定义可以根据需要重写或添加某些配置的值。使用父对象和子对象的定义方式可能会节省大量的键入工作。实际上这是设计模式中模板模式的一种形式。个人认为可以解决“子类”与“父类”之间的耦合。

  在object节点中设置parent属性来指明是继承关系,而并非正真意义的继承。

  实现代码:

      <!--抽象对象定义和子对象定义-->
      <object id="parent" type="SpringNetProcessor.Parent, SpringNetProcessor" abstract="true">
        <property name="Name" value="parent"/>
      </object>
      <object id="child" type="SpringNetProcessor.Child, SpringNetProcessor" parent="parent"/>
 
    public abstract class Parent
    {
        public string Name { get; set; }
    }
    public class Child
    {
        public string Name { get; set; }
    }

  我们可以看出Child类并没有继承Parent类。

  输出效果:

转载于:https://www.cnblogs.com/wangyhua/p/IOC9.html

Spring.Net学习笔记九(自定义对象行为)相关推荐

  1. Spring.NET学习笔记11——自定义对象行为(基础篇) Level 200

    Spring.NET通过几个专门的接口来控制容器中对象的行为.说到对象的行为无非就要提到对象的生命周期控制.类似在WinForm开发,Form生命周期中,Load方法为Form的载入方法和Dispos ...

  2. Spring.NET学习笔记——目录(原)

    目录 前言 Spring.NET学习笔记--前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1--控制反转(基础篇) Level 200 Spring.NET学习笔 ...

  3. Spring框架学习笔记(三)(AOP,事务管理)

    Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...

  4. Spring Boot学习笔记-进阶(3)

    文章目录 Spring Boot学习笔记-进阶(3) 一.Spring Boot与缓存 二.Spring Boot与消息 三.Spring Boot与检索 四.Spring Boot与任务 异步任务 ...

  5. Spring Boot学习笔记-基础(2)

    Spring Boot学习笔记-基础(2) Spring Boot 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 – 使用嵌入式的Servlet容器,应用无需打成WAR包 – st ...

  6. Spring Boot学习笔记(1)

    文章目录 Spring Boot学习笔记(1) Spring Boot 整合 JSP Spring Boot HTML Thymeleaf 常用语法 Spring Boot 数据校验 Spring B ...

  7. Spring Cloud 学习笔记(2 / 3)

    Spring Cloud 学习笔记(1 / 3) Spring Cloud 学习笔记(3 / 3) - - - 56_Hystrix之全局服务降级DefaultProperties 57_Hystri ...

  8. Spring Cloud 学习笔记(2 3)

    Spring Cloud 学习笔记(1 / 3) Spring Cloud 学习笔记(3 / 3) - - - 56_Hystrix之全局服务降级DefaultProperties 57_Hystri ...

  9. Spring Cloud 学习笔记(1 / 3)

    Spring Cloud 学习笔记(2 / 3) Spring Cloud 学习笔记(3 / 3) - - - 01_前言闲聊和课程说明 02_零基础微服务架构理论入门 03_第二季Boot和Clou ...

最新文章

  1. java并行任务dispatch_Java模拟 双分派Double Dispatch
  2. Missing message for key xxx in bundle (default bundle) for locale zh_CN
  3. Java设计模式(五):单例设计模式
  4. 阿里云发布 Spring Boot 新脚手架,真香
  5. 超详细的HTTP面试题
  6. c语言 宏定义 去除宏定义_如何检查是否在C中定义了宏?
  7. pg_lightool-postgres数据分布查看工具
  8. pmp 第六版 模拟卷5错题整理
  9. 学习通网页版无法粘贴至提交答案框的解决方法
  10. 机器视觉——光源选型
  11. 嵌入式C语言数据类型
  12. go-micro服务报错:wsasend: An existing connection was forcibly closed by the remote host
  13. Android百度地图+OSS图片拍照上传+导航+idea
  14. 华中科技大学计算机王凯,苗蕾-环境科学与工程学院
  15. opencv cv2.inpaint()的代码与理论
  16. linux设置用户的执行权限,Linux下ACL权限控制以及用sudo设置用户对命令的执行权限...
  17. 微信公众平台开发(二) 微信公众平台示例代码分析
  18. 人工智能是怎样辅助安全自动化、分析处理和响应的?
  19. Stress命令Linux性能测试,压力测试工具(Centos演示)
  20. java对图片的各种操作(压缩、加水印(文字或图片)、旋转)

热门文章

  1. c语言双精度百分号,C语言输出百分号%的方法和示例
  2. php 权限规范,项目人员权限验证
  3. 浏览器复制网页链接到微信,显示却只有网页title解决
  4. [手把手教]discuzX2插件制作教程__最菜鸟级别的入门坎 【二】
  5. Interlocked..::.Add 方法
  6. js网页顶部线性页面加载进度条,jquery头部线性进度条总结
  7. Multimedia (MP3, MPEG-4, AVI, DiVX, etc.) support in Ubuntu 12.04 (Precise)
  8. Python is同一性运算符和==相等运算符区别
  9. Pandas列小数转化为百分数
  10. AAAI-19录用论文清单