猿问

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

我正在为一个 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 类。


@Service

public class RegistrationService {


  @Autowired

  private Provider<RegistrationGroupRepository> registrationGroupRepository;


  public List<RegistrationGroup> getRegistrationGroup() {

     return registrationGroupRepository.getRegistrationGroups(1);

  }


}

如果两个或多个请求执行 getRegistrationGroups(1) 方法,我会出现竞争情况吗?我想我是在安全方面,因为我正在使用带有原型 bean 的方法注入(提供程序),并且每次我从调用中获取新实例时?


弑天下
浏览 84回答 1
1回答

慕码人2483693

首先,使您的 Bean 成为原型Bean 并不能确保为每个方法调用(或每次使用,等等)创建一个实例。在您的情况下,由于使用情况,您在这一点上没问题Provider。但是,我注意到您正在getRegistrationGroups直接访问。return&nbsp;registrationGroupRepository.getRegistrationGroups(1);这段代码如何编译?您应该调用实例get()。Providerreturn&nbsp;registrationGroupRepository.get().getRegistrationGroups(1);回答您的问题,您应该很好地使用此代码。我不喜欢你在内部保持某种状态的事实RegistrationGroupRepositoryImpl,但这是你的选择。我总是喜欢将我的所有领域都作为final.&nbsp;如果其中一个要求我删除final修饰符,则说明设计有问题。
随时随地看视频慕课网APP

相关分类

Java
我要回答