考虑下面的代码片段-将简单的,不是线程安全的HashMap传递给SomeHandlerFunction
并在SomeHandlerFunction
中的其他自动装配bean中使用它是否安全?
@Bean
RouterFunction<ServerResponse> request(SomeHandlerFunction handlerFunction) {
handlerFunction.setSimpleMapProperties(new HashMap());
return route(GET("/dummy"), handlerFunction);
}
@Service
class SomeHandlerFunction implements HandlerFunction {
@Autowired
List<AnotherBeans> anotherBeans;
Mono<T> handle(ServerRequest var1) {
// code...
}
}
我对WebFlux中的多线程模型有所了解,但是这种情况使我感到困惑。
答案 0 :(得分:1)
如果HashMap
是可变的,则不是个好主意-即使使用Spring MVC也是如此。
您应该怎么做呢?这实际上取决于手头的用例。
如果您要设置本地内存缓存,则可以使用Caffeine之类的库,也可以仅使用ConcurrentMapCache
。
如果您希望与该bean共享配置密钥,则可以使用Collections.unmodifiableMap
甚至更好的方法包装该映射,并使其成为正确的不可变POJO。
如果这是为了携带与正在处理的请求链接的临时数据,则应该使用请求属性或Reactor上下文。