zoukankan      html  css  js  c++  java
  • Spring.NET中,容器对象中的作用域

    Spring.Net中,容器对象部署分为单列(singleton)和非单列模式(非singleton)。单列模式下,即一个对象被定义为singleton时,容器中就只会有一个共享实例,任何时候通过id或别名请求该对象,都只会返回改共享实例。也就是说,这个实例之会被创建一次。但使用非Singleton模式时,每次请求对象,都会创建一个新的实例对象。Spring.Net默认使用单例模式。每次调用GetObject时,创建的都是同一个实例;当Singleton='false'时,调用GetObject时,创建的是不同的实例对象。当脱离调用方法作用域时,容器对象即被销毁。

    一。单例模式(Singleton)和非单例模式

    1 <objects>
    2     <!--spring.net默认使用单列模式-->
    3     <object name="myIoc" type="SimpleIOC.model.Customer,SimpleIOC"></object>
    4 </objects>
    1 public static void Main(string[] args)
    2         {
    3             IApplicationContext context = ContextRegistry.GetContext();
    4             Customer customer = (Customer)context.GetObject("myIoc");
    5             Console.WriteLine(customer.GetType());
    6             Customer customer1 = (Customer)context.GetObject("myIoc");
    7             Console.WriteLine(customer.Equals(customer1));//返回true
    8             Console.ReadKey();
    9         }
    1 objects>    
    2     <!--ASP.NET默认使单列模式-->
    3     <object name="myIoc" type="SimpleIOC.model.Customer,SimpleIOC" singleton="false"></object>
    4 </objects>
    1 Console.WriteLine(customer.Equals(customer1));//返回false

    二。容器对象创建控制

      属性lazy-init属性控制容器创建对象时间。属性设置为true时,容器在GetObject创建对象,设置为false时,容器在ASP.NET初始化时创建对象,默认是false,在容器初始化时创建对象。当设置为true时,程序启动会快点,但是不会帮我们检测错误了,在调用是一旦发生错误,后果不堪设想。

    1 <objects>
    2     <!--设置lazy-init=false,在ASP.NET初始化的时候创建对象。ASP.NET默认是false-->
    3     <object name="myIoc" type="SimpleIOC.model.Customer,SimpleIOC" lazy-init="false"></object>
    4 </objects>
     1 public static void Main(string[] args)
     2         {
     3             IApplicationContext context = ContextRegistry.GetContext();
     4             Console.WriteLine("First");
     5             Customer customer = (Customer)context.GetObject("myIoc");
     6             Console.WriteLine(customer.GetType());
     7             Customer customer1 = (Customer)context.GetObject("myIoc");
     8             Console.WriteLine(customer.Equals(customer1));//返回true
     9             Console.ReadKey();
    10         }

    输出结果,可见,ASP.NET初始化时就创建了对象:

      

    lazy-init='true',在GrtObject的时候,创建对象:

    1 <?xml version="1.0" encoding="utf-8" ?>
    2 <objects>
    3     <!--设置lazy-init=true,在GetObject时,创建对象-->
    4     <object name="myIoc" type="SimpleIOC.model.Customer,SimpleIOC" lazy-init="true"></object>
    5 </objects>

    备忘记,折构函数:当对象脱离作用域是,被调用。一般是用来清除对象的。有GC控制调用

     1  public class Customer
     2     {
     3         public Customer() 
     4         {
     5             Console.WriteLine("customer被创建");
     6         }
     7         ~Customer() 
     8         {
     9             //折构函数,当对象脱离作用域是,被调用。一般是用来清除对象的。有GC控制调用
    10             Console.WriteLine("customer被销毁");
    11         }
    12     }
  • 相关阅读:
    14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp
    14.1 NFS介绍 14.2 NFS服务端安装配置 14.3 NFS配置选项
    13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复
    13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令
    12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_basedir 12.24 php-fpm进程管理
    12.17 Nginx负载均衡 12.18 ssl原理 12.19 生成ssl密钥对 12.20 Nginx配置ssl
    12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置 12.16 Nginx代理
    在界面workspacebar上添加的OnContextMenu函数打的断点始终进不去,显示当前不会命中断点还未为文档加载任何符号
    VS2019安装闪退, 不出现安装界面,解决办法
    BCGP单元格多列合并需要注意的
  • 原文地址:https://www.cnblogs.com/king-tao/p/13412661.html
Copyright © 2011-2022 走看看