分享

Spring.NET教程(五)

 黄金屋1 2019-05-26

Spring.NET教程(五)——容器中对象的作用域(基础篇)

2018年05月23日 10:43:41 Wang Jianguo 阅读数:84

        容器中象的部署分两种方式:singleton和非singleton(javaprototype)里的singleton指的是例模式,就是当一个象被定义为singleton,容器中就只会有一个共享的例,任何候通id该对象都会返回个共享例的引用(也就是说这象只会被建一次)。当使用非singleton,或者原型模式布署每次象都会建新的例。在某些合,如果需要每个用返回独的用户对象或其它象,非singlton布署模式就比理想。Spring.NET认为singleton模式。每次GetObject方法得到的都是同例;当singleton="false"每次GetObject方法得到的是不同的

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <objects xmlns="http://www.">
  3. <!--单例模式-->
  4. <object id="personDao" type="SpringNetScopes.PersonDao, SpringNetScopes"/>
  5. <!--非单例模式-->
  6. <object id="person" type="SpringNetScopes.Person, SpringNetScopes" singleton="false" />
  7. <!--调用时加载-->
  8. <object id="personServer" type="SpringNetScopes.PersonServer, SpringNetScopes" lazy-init="true"/>
  9. </objects>
  1. namespace SpringNetScopes
  2. {
  3. public class PersonDao : IPersonDao
  4. {
  5. public PersonDao()
  6. {
  7. Console.WriteLine("PersonDao被实例");
  8. }
  9. public override string ToString()
  10. {
  11. return "我是PersonDao";
  12. }
  13. ~PersonDao()
  14. {
  15. Console.WriteLine("PersonDao被销毁");
  16. }
  17. public void Save()
  18. {
  19. Console.WriteLine("保存 Person");
  20. }
  21. }
  22. public class Person
  23. {
  24. public Person()
  25. {
  26. Console.WriteLine("Person被实例");
  27. }
  28. public override string ToString()
  29. {
  30. return "我是Person";
  31. }
  32. ~Person()
  33. {
  34. Console.WriteLine("Person被销毁");
  35. }
  36. }
  37. public class PersonServer
  38. {
  39. public PersonServer()
  40. {
  41. Console.WriteLine("PersonServer被实例");
  42. }
  43. public override string ToString()
  44. {
  45. return "我是PersonServer";
  46. }
  47. ~PersonServer()
  48. {
  49. Console.WriteLine("PersonServer被销毁");
  50. }
  51. }
  52. }
  53. [TestMethod]
  54. public void CreateWithSingleton()
  55. {
  56. string[] xmlFiles = new string[]
  57. {
  58. "assembly://SpringNetScopes/SpringNetScopes/Objects.xml"
  59. };
  60. IApplicationContext context = new XmlApplicationContext(xmlFiles);
  61. IObjectFactory factory = (IObjectFactory)context;
  62. object obj1 = factory.GetObject("personDao");
  63. object obj2 = factory.GetObject("personDao");
  64. Assert.AreEqual(obj1, obj2);
  65. }
  66. [TestMethod]
  67. public void CreateWithOutSingleton()
  68. {
  69. string[] xmlFiles = new string[]
  70. {
  71. "assembly://SpringNetScopes/SpringNetScopes/Objects.xml"
  72. };
  73. IApplicationContext context = new XmlApplicationContext(xmlFiles);
  74. IObjectFactory factory = (IObjectFactory)context;
  75. object obj1 = factory.GetObject("person");
  76. object obj2 = factory.GetObject("person");
  77. Assert.AreNotEqual(obj1, obj2);
  78. }
  79. [TestMethod]
  80. public void CreateWithLazy()
  81. {
  82. string[] xmlFiles = new string[]
  83. {
  84. "assembly://SpringNetScopes/SpringNetScopes/Objects.xml"
  85. };
  86. IApplicationContext context = new XmlApplicationContext(xmlFiles);
  87. IObjectFactory factory = (IObjectFactory)context;
  88. object dao = factory.GetObject("personDao");
  89. Console.WriteLine(dao.ToString());
  90. object server = factory.GetObject("personServer");
  91. Console.WriteLine(server.ToString());
  92. }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多