gpt4 book ai didi

java - spring 是否为 Autowiring 字段创建一个新对象?

转载 作者:行者123 更新时间:2023-12-01 18:01:49 25 4
gpt4 key购买 nike

我有一些调度程序任务,每 1 小时触发一次 UserInfoServiceExecutor、AdminInfoServiceExecutor 服务(这两个服务同时启动)。

问题是这些服务使用 LoggerService 和 LoggerService 搜索方法几乎需要 5 分钟才能完成(我的意思是 while 循环)。由于要搜索 userInfo 日志,您需要使用某个用户帐户登录,并且要获取管理日志,您需要使用某个管理员帐户登录(这意味着将返回不同的 sessionToken),

AdminInfoServiceExecutor 在其之后启动时是否会覆盖 UserInfoServiceExecutor sessionToken?

@Service
public class UserInfoServiceExecutor {
@Autowired
private LoggerService loggerService;

public void saveUserInfos(){
loggerService.loginAndSearch("userInfo");
}

}

@Service
public class AdminInfoServiceExecutor {
@Autowired
private LoggerService loggerService;

public void saveAdminInfos(){
loggerService.loginAndSearch("adminInfo");
}

}

@Service
public class LoggerService{

private String sessionToken;

public String loginAndSearch(String key){

if(key.equals("userInfo"))
sessionToken = login(user);

if(key.equals("adminInfo"))
sessionToken = login(admin);

search(key);

}

public String search(String keyword){
while(hasMoreResults){
getResults(keyword, sessionToken);
}
}
}

编辑:我正在使用默认的 Spring 作用域。(单例)

最佳答案

您的问题主要是关于您的LoggerService bean的范围,就spring容器而言,它涉及您在定义bean时如何声明的范围,Spring的默认值范围是单例。

因此,由于您没有提到范围,它将作为单例范围进行管理

由于您将 sessionToken 作为类成员,因此它很有可能被覆盖,因此您可能必须在此处处理同步。

Note: Synchronized block or Synchronized method only works in the purview of single JVM, in case you deploy your code/application in clustered envioronment in different JVMs this synchronization approach will not work.

关于java - spring 是否为 Autowiring 字段创建一个新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40375540/

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