2013-10-03 133 views
-2

请回答以下问题。春季的一些问题

1)装载的bean在哪里。将他们加载在Spring ApplicationContext中?
或者它们被ApplicationContext加载到堆中。
2)在Spring Web应用程序中,如果应用程序未被使用一天左右,ApplicationContext对象垃圾是否会被收集?

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

+0

拆分和细化的问题,请。 – vertti

回答

1

我认为你应该更好地分解这些问题 - 他们每个人都值得专注线程imho。

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

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

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

  4. 真的不明白问题,所以我不能回答,对不起:(

  5. 豆再次处理器的线程安全性取决于实际写在那里,它的代码在那里,而不是基础结构代码。

希望这有助于