想象一下我有一个存储bean,它封装了与存储实体有关的逻辑。
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
根据这些属性,我必须要么创建一个bean,要么使用MixedStorage
创建两个bean(或不创建任何bean,但这不在问题范围内)。
我创建了一个StorageFactory factory-bean:
public class StorageFactory {
// decide which impl to create basing on properties
}
现在,我正在传递所有实现所需的所有依赖资源(RedisSerializer
,JedisPool
,RedisService
,FileService
)。在添加新的实现的同时,这些资源的数量可以更快地增长。
有什么办法不传递所有依赖关系,而是在以后初始化它们?
我正在使用XML
答案 0 :(得分:0)
我不知道它是否对您有用,但是使用注释看起来像这样:
对于豆类:
@Component("FileStorage")
public FileStorage implements Storage { ... }
服务:
@Service
public class StorageFactory {
@Autowired
private Map<String,Storage> storageMap;//where key - bean name, value - class instance
}
是的,该映射将包含所有bean,但是您将能够基于属性文件实现一些逻辑。