gpt4 book ai didi

java - 无状态bean什么时候实例化?

转载 作者:行者123 更新时间:2023-11-30 06:20:43 27 4
gpt4 key购买 nike

我正在编写基于 JavaEE 的应用程序,但我不完全确定依赖项注入(inject)何时发生。假设我有两门课:

@Stateless
class RepoBean {
@Resource
private SomeResource someResource;

public List<SomeObject> search(String someQuery) {// implementation}
}

@Stateless 
class ServiceBean {
@EJB
private RepoBean repoBean;

public void search(List<String> someQueries {
for (String someQuery : someQueries) {
List<SomeObject> someObjects = this.repoBean.search(someQuery)
for (SomeObject someObject : someObjects) {
// handle someObject)
}
}
}

我的问题是:

  1. repo bean 何时实例化?在服务实例化时还是在使用时?
  2. 如果这个循环是 N 个“长”对象,迭代中是否只会使用一个 repoBean 实例,或者每次都会向池请求 RepoBean 实例,但我不能保证 repo 是相同的?
  3. 除了将 repo 的搜索方法修改为 Map<String, List<SomeObject>> search(List<String> searchQueries) 之外,还有什么方法可以确保所有查询都在同一个 RepoBean 实例上运行吗?

最佳答案

无状态 bean 实例化是惰性的。如果应用程序启动,将创建一个空的无状态 EJB 池,也称为空闲池。在第一个客户端请求时,将创建、使用一个具体的 RepoBean 实例,然后将其放入空闲池中。池的大小是可配置的。经过一段不活动时间后,实例将被销毁并从池中删除。

this.repoBeanServiceBean#search 方法内部将始终相同,并且只要父 ServiceBean 实例处于 Activity 状态。

关于java - 无状态bean什么时候实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48206873/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com