У меня есть фабрика для создания текста и абзацев для документа (отчета). Он имеет реализацию настройки карты с интерфейсом поставщика в качестве своего свойства (поля члена) для ленивого извлечения вспомогательного объекта (например, Customer).
Является ли потокобезопасным использование поставщика в качестве внутреннего состояния карты, возможны ли подводные камни / утечки памяти, когда несколько потоков пытаются вызвать функцию создания?
Кроме того, карта предполагается, что существует только в области запроса.
public class TextFactory <T extends BasicEntity> {
private static class TextMap<T extends BasicEntity> extends HashMap<String, String> {
private final Supplier<T> entity;
public TextMap(Supplier<T> entity) {
this.entity = entity;
}
@Override
public String get(final Object key) {
String val = super.get(key);
if (val == null) {
val = CdiUtil.getObject(TextService.class).build(this.entity.get(), key.toString(), null);
put((String) key, val);
}
return val;
}
public static <T> Map<String, String> create(final Supplier<T> entity) {
return new TextMap<>(entity);
}
}