getBeansOfType。可通过接口获取其实现类(前提是这些实现类由spring容器管理)
场景:想通过某个 Code 来获取实现类。
按例:吃水果,有苹果和梨,想吃什么自己拿
代码:
// 水果枚举
public enum FruitTypeEnum {
Apple,
Pear
}
// 水果接口
public interface Fruits{
FruitTypeEnum type();
};
//实现类
public class Apple implements Fruits {
public FruitTypeEnum type(){
return FruitTypeEnum.Apply
}
}
//实现类
public class Pear implements Fruits {
public FruitTypeEnum type(){
return FruitTypeEnum.Pear
}
}
//注册工厂
@Component
public class FruitFactory{
private final EnumMap<FruitTypeEnum, Fruits> fruitMap = new EnumMap<>();
public void setFruitByType() {
Map<String, Fruits> factories = applicationContext.getBeansOfType(Fruits.class);
for (Fruits fruits : factories.values()) {
fruitMap.put(fruits.type(), fruits);
}
}
}
注意:
实现InitializingBean接口,重写afterPropertiesSet方法时执行setFruitByType,可以在spring初始化的时候执行: