java - Web 应用程序中的 Spring bean 初始化

标签 java spring

我们在 init 方法中使用 WebApplicationContextUtils 来处理 Web 应用程序和 Autowiring bean。

您能澄清一些有关 Bean 初始化的细节吗?

问题是由静态工厂方法引起的。

假设有一个在静态工厂方法中创建的 bean。

正如我们所见,当部署 Web 应用程序时,ContextLoaderListener 会初始化所有存在的 bean

在 Spring xml 配置文件中。

现在就发生了这样的事情。在静态工厂方法中,我们运行一个开始计时的计时器。

但实际上我们不希望它开始计时,除非将 bean 注入(inject)到对象的属性中!

这是第一个问题 - 所有 bean 都会在部署时自动初始化 - 正确吗?

之后,当我们需要注入(inject)时,它只是感觉到与初始化期间创建的对象的地址的链接,尽管对象是在 Web 应用程序部署上立即创建的! (我假设 Spring 的默认单例创建行为)

第二个问题:Web 应用程序的所有副本都使用相同的 bean,因此所有 bean 都是 WEB-APP 范围的,每个 Spring bean 都在运行的该 Web 应用程序的所有副本之间共享?

最佳答案

That is question number one - all the beans are automatically initialized on deploy - correct?

除非您启用某种延迟加载,否则是的。

Second question: are all copies of a web app use the same beans, so all beans are WEB-APP wide, every Spring bean is shared between all the copies of this web app running?

我认为这里对于“网络应用程序的副本”的含义存在一些混淆。您的意思是您正在将相同的 Web 应用程序(代码和文件)部署到多个上下文路径下的应用程序服务器吗?即,将您的 webapp 项目部署为 webappCopy1webappCopy2webappCopy3 等?如果是这样,那么每个应用程序都是隔离的,并创建它自己单独的 bean 工厂。

关于java - Web 应用程序中的 Spring bean 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2788144/

相关文章:

java - 如何使用java查找纪元格式的GMT当前时间

java - Android:如何在不同线程中迭代 ArrayList<String>

java - JSON转换和应用程序兼容性问题

java - 如何判断 java.util.Date 对象是否包含时间部分?

java - 我的计算器不能乘法或除法

java - 无法在 Eclipse 中设置 Tomcat 6 - "Could not load the Tomcat server configuration"错误

java - 集成 Play 框架 2.0 和 Spring 框架

java - Spring + hibernate : No property findAddresses found for type UserProfile while fetching a list

java - 在特定异常情况下无法连续重试 Camel Route

java - 在 Spring 从数据库填充下拉列表