Spring Factory bean用于具有不同依赖关系的实现

时间:2018-10-11 13:25:15

标签: java spring spring-ioc

想象一下我有一个存储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
}

现在,我正在传递所有实现所需的所有依赖资源(RedisSerializerJedisPoolRedisServiceFileService)。在添加新的实现的同时,这些资源的数量可以更快地增长。

有什么办法不传递所有依赖关系,而是在以后初始化它们?

我正在使用XML

1 个答案:

答案 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,但是您将能够基于属性文件实现一些逻辑。