Представьте, что у меня есть компонент хранения, который инкапсулирует логику, связанную с хранением моих сущностей.
public interface Storage {
Object get(String id);
String save(Object obj);
}
И у меня есть 3 реализации:
public FileStorage implements Storage { ... } // needs FileService
public RedisStorage implements Storage { ... } // needs JedisPool, RedisService and RedisSerializer
public MixedStorage implements Storage { ... } // combines other Storages
У меня также есть 2 свойства:
redis.enabled
file.enabled
В зависимости от этих свойств мне нужно либо создать один из компонентов, либо оба из них, используя MixedStorage
(или ни одного, но это не входит в сферу применения).
Я создал фабричный компонент StorageFactory:
public class StorageFactory {
// decide which impl to create basing on properties
}
Теперь я передаю все зависимые ресурсы, необходимые для всех реализаций (RedisSerializer
, JedisPool
, RedisService
, FileService
),Количество этих ресурсов может расти очень быстро при добавлении новых реализаций.
Есть ли способ не пропускать все зависимости, а инициализировать их позже?
Я использую XML