作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在为一个 Web 应用程序使用带有 Jetty 嵌入式 Web 服务器的 Spring Boot。我想 100% 确定 repo 类是线程安全的。
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;
}
以及从存储库调用 getRegistrationGroups 方法的服务类。
@Service
public class RegistrationService {
@Autowired
private Provider<RegistrationGroupRepository> registrationGroupRepository;
public List<RegistrationGroup> getRegistrationGroup() {
return registrationGroupRepository.getRegistrationGroups(1);
}
}
如果两个或多个请求执行 getRegistrationGroups(1) 方法,是否会出现竞争条件情况?我想我是出于安全考虑,因为我正在使用带有原型(prototype) bean 的方法注入(inject)(提供程序),并且每次我都从调用中获取新实例?
最佳答案
首先,使您的 Bean 成为原型(prototype) Bean 并不能确保为每个方法调用(或每次使用,无论什么)创建一个实例。
在您的情况下,由于 Provider
的使用,您在这一点上没问题。
但是我注意到您正在直接访问 getRegistrationGroups
。
return registrationGroupRepository.getRegistrationGroups(1);
这段代码如何编译?您应该在 Provider
实例上调用 get()
。
return registrationGroupRepository.get().getRegistrationGroups(1);
回答您的问题,您应该可以使用此代码。我不喜欢您在 RegistrationGroupRepositoryImpl
中维护某种状态,但这是您的选择。
我总是喜欢将我的所有字段设置为 final
。如果其中一个要求我删除 final
修饰符,则设计有问题。
关于java - 并发请求的 repo 类线程安全吗? - Spring Boot ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54736253/
我是一名优秀的程序员,十分优秀!