spring 中 singleton 和 prototype 作用域的比较()

  本篇文章为你整理了spring 中 singleton 和 prototype 作用域的比较()的详细内容,包含有 spring 中 singleton 和 prototype 作用域的比较,希望能帮助你了解 spring 中 singleton 和 prototype 作用域的比较。

  Spring Bean 作用域

  主要了解 singleton 和 prototype 就好了,他们分别使用 单例模式 和 原型模式

  
首先我们将User对象通过 singleton 和prototype 两种方式分别注入到容器中

  我们三次拿到User对象,比较结果(比较name属性)

  观察可以看到,使用 singleton 作用域拿到的是相同的对象,prototype 作用域拿到的是不同的对象

  依赖注入 比较 singleton 和 prototype 两种作用域

  结论:singleton 作用域拿到的是相同的对象,prototype 作用域拿到的仍然是不同的对象

  通过@Autowired方式依赖查找对象

  把他们打印出来看看,这样子会报错,因为容器中有重复的对象,而我们没有指定哪个是primary

  如果我们使用 @Qualifier 注解指定要注入的对象名称,就不会报错了

  输出结果如下:可以看到,singleton 作用域拿到的是相同的对象,prototype 作用域拿到的仍然是不同的对象

  依赖注入集合时 singleton 和 prototype 作用域的比较

  结论:集合中会同时存在一份 singleton bean 和 prototype bean

  使用@Autowired直接注入map集合

  输出,打印,可以看到 singleton 和 prototype 作用域的对象同时存在

  singleton 和 prototype 作用域的生命周期方法的回调情况

  结论:

  singleton 和 prototype 都会执行初始化方法回调

  但仅 singleton 会执行销毁方法回调

  为了方便看到 beanName,User类实现了 BeanNameAware 接口,并定义了 初始化 和 销毁方法,具体如下:

  我们仍然使用依赖注入集合的方式同时拿到 singleton 和 prototype 作用域中的 User bean,并将他们输出

  输出看看,可以看到 prototype bean 的销毁方法并没有被回调

  以上就是spring 中 singleton 和 prototype 作用域的比较()的详细内容,想要了解更多 spring 中 singleton 和 prototype 作用域的比较的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: