为了账号安全,请及时绑定邮箱和手机立即绑定

并发请求的 repo 类线程安全吗?- 弹簧靴

并发请求的 repo 类线程安全吗?- 弹簧靴

弑天下 2022-06-23 17:29:12
我正在为一个 Web 应用程序使用带有 jetty 嵌入式 Web 服务器的 Spring Boot。我想 100% 确定 repo 类是线程安全的。回购类@Repository@Scope("prototype")public class RegistrationGroupRepositoryImpl implements RegistrationGroupRepository {  private RegistrationGroup rg = null;  Integer sLastregistrationTypeID = 0;  private UserAccountRegistration uar = null;  private List<RegistrationGroup> registrationGroup = new ArrayList<>();  private NamedParameterJdbcTemplate jdbcTemplate;  @Autowired  public RegistrationGroupRepositoryImpl(DataSource dataSource) {     this.jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);  }  public List<RegistrationGroup> getRegistrationGroups(Integer regId) {    // Some logic here which is stored in stored in the instance variables and registrationGroup is returned from the method   return this.registrationGroup;  }以及从 repo 调用 getRegistrationGroups 方法的 Service 类。@Servicepublic class RegistrationService {  @Autowired  private Provider<RegistrationGroupRepository> registrationGroupRepository;  public List<RegistrationGroup> getRegistrationGroup() {     return registrationGroupRepository.getRegistrationGroups(1);  }}如果两个或多个请求执行 getRegistrationGroups(1) 方法,我会出现竞争情况吗?我想我是在安全方面,因为我正在使用带有原型 bean 的方法注入(提供程序),并且每次我从调用中获取新实例时?
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

首先,使您的 Bean 成为原型Bean 并不能确保为每个方法调用(或每次使用,等等)创建一个实例。

在您的情况下,由于使用情况,您在这一点上没问题Provider
但是,我注意到您正在getRegistrationGroups直接访问。

return registrationGroupRepository.getRegistrationGroups(1);

这段代码如何编译?您应该调用实例get()Provider

return registrationGroupRepository.get().getRegistrationGroups(1);

回答您的问题,您应该很好地使用此代码。我不喜欢你在内部保持某种状态的事实RegistrationGroupRepositoryImpl,但这是你的选择。

我总是喜欢将我的所有领域都作为final. 如果其中一个要求我删除final修饰符,则说明设计有问题。


查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信