关于春天的一些问题

时间:2013-10-03 03:44:06

标签: spring

请回答以下问题。

1)豆子装在哪里。它们将被加载到Spring ApplicationContext中吗?       或者它们由ApplicationContext加载到堆中 2)在Spring Web应用程序中,如果应用程序一天左右没有使用,ApplicationContext对象会被垃圾收集吗?

3)如何使单身人士线程安全? 4)Spring中有哪些其他具有Threadsafe问题的对象 5)BeanPostProcessor的方法为应用程序中的每个bean执行 如果在复杂的应用程序中有数千个对象,它是如何处理的 beanpostProcessors线程是否安全?

1 个答案:

答案 0 :(得分:1)

我认为你应该更好地分解这些问题 - 他们每个人都应该有一个专门的线程imho。

  1. 在任何情况下,Spring都会为您加载bean。怎么样?它读取有关bean的元数据(基于xml / annotations),并将它们连接在一起。所以spring为你做了一个“新”,但是如何访问这个bean呢? ApplicationContext在这里发挥作用。它就像所有这些bean的容器一样,是一个允许通过名称访问bean实例的容器(getBean(“beanName”))。 在一个非常简单的方法中,您可以将应用程序上下文视为名称的bean映射。 我并不完全理解这里的“堆”问题。 Spring bean只是生活在JVM中的Java对象,所以是的,基本上它们都是在堆中加载的。唯一的区别是它们是由春天而不是你的代码加载的。

  2. 应用程序上下文不会被垃圾收集,因为它存储在整个Web应用程序中(并可从中访问)。 当然,如果这些应用程序上下文创建的bean不是单例或其他内容,则可以对其进行垃圾回收。我知道这是一个模糊的答案,随时可以改进你的问题。

  3. 其核心架构中的Singleton与线程安全无关。是的,spring提供了'singleton'bean范围。这意味着每次执行getBean调用时,您将获得相同的实例,因此它是一个单例(只要您在spring中管理此bean)。这个定义不会影响bean的设计,所以如果你通过调用它的构造函数(new keyword)来创建这个类的实例,你将得到一个完全不同于这个类型的对象,而不是弹簧。 重要的是要了解Spring作为框架的责任在何处开始以及何时结束:) 因此,如果您希望您的单例是线程安全的,那么您应该将其设计为线程安全的。 最好的做法是无状态,但同样,它与spring无关,所以请在不同的帖子中询问,或者只是谷歌的“线程安全设计”

  4. 真的不明白这个问题,所以我无法回答,抱歉:(

  5. Bean post处理器的线程安全性再次取决于实际写入的内容,它的代码,而不是基础架构代码。

  6. 希望这有帮助