我们在 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
项目部署为 webappCopy1
、webappCopy2
、webappCopy3
等?如果是这样,那么每个应用程序都是隔离的,并创建它自己单独的 bean 工厂。
关于java - Web 应用程序中的 Spring bean 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2788144/