В Spring есть много разных способов создания bean-компонентов, но возможно ли создать bean-компонент путем десериализации ресурса?
Мое приложение имеет несколько компонентов, и каждый из них управляет определенным типом данных. Во время тестирования объект данных создается непосредственно и устанавливается непосредственно на компонент, например, component.setData (someDataObject). Во время выполнения данные доступны как сериализованный объект и считываются компонентом из сериализованного потока (поток передается как ресурс из контекста Spring.)
Вместо того, чтобы каждый компонент явно десериализовал свои данные из потока, было бы более согласованным и гибким, если бы Spring десериализовал объект данных из ресурса и установил его в целевом компоненте. Таким образом, компоненты изолируются от того, откуда поступают их данные.
Есть ли DeserializerFactoryBean или что-то подобное?
EDIT:
Вот пример кода, который мы надеемся уточнить:
public class ComponentData implements Externalizable
{
// a complex data structure, behind a simpler interface
}
public class Component
{
private ComponenttData componentData;
public Component(ComponentData data)
{
componentData = data;
}
// other methods that operate using the data
// factory method to create from serialized data
static Component createFromResource(Resource resource)
{
return new Component(deserialize(resource));
}
}
Существует много типов компонентов, и каждый тип компонента создается несколько раз с различными экземплярами данных.
В тесте Компоненты и их экземпляры ComponentData строятся в коде. В производстве пружинный компонент с атрибутом «factory-method» используется для вызова статического метода Componnet.createFromResource, который десериализует данные из ресурса. Существует много типов компонентов, и у каждого из них один и тот же статический метод для построения из десериализованных данных. Это само по себе кажется плохим из-за повторения. Мне также кажется странным, что конструкция компонентов при испытаниях и производстве не совпадают. Если десериализацию можно перенести в контекст Spring, статические методы для Компонентов можно удалить, и тогда вся инъекция зависимостей выполняется Spring вместо необходимости кодировать это как особый случай.
например. Я представляю что-то вроде
<bean name="componentData" class="DeserializingFactoryBean">
<constructor-arg value="/data/componentData1.dat"/> <!-- resource -->
</bean>
<bean name="component" class="Component">
<constructor-arg ref="componentData"/>
</bean>
Когда я первоначально писал, я думал, что это может существовать, но я, что я мог пропустить в огромных весенних javadocs. Судя по первоначальным ответам, Spring не имеет десериализованного фабричного компонента.
Если DeserializingFactoryBean не является правильным подходом, какие альтернативы существуют?