当我们定义了一个接口,以下是接口中的方法
public interface RulesService {
void statisticsPeople(Date date, Activity Activity);
}
而当这个接口有多个实现类来满足不同的业务场景的时候,我们可以通过以下的注入方式
@Autowired
private Map<String,RulesService> statisticalRulesServiceMap;
以这种方式进行注入,spring会将实现了该接口的类全部注入到这个map当主,而这个key(String)类型存储的就是我们实现类的类名
@Slf4j
@Service("IronManRulesServiceImpl")
public class IronManRulesServiceImpl implements RulesService {}
根据以上代码可知我们的IronManRulesServiceImpl实现类,在map中的key为在@Service注解中指定的名称 “IronManRulesServiceImpl”。
具体业务场景就是做报表啊,根据不同类型统计数值啊什么,都可以使用这种方式。让前端给你传个标识符或者别的方式拿到标识符,我这里就是获取“IronMan”这个标识符,然后自己拼上个实现类的后缀(RulesServiceImpl),来获取这个对象。
用这种方式,我们就可以通过不同的key来获取不同的实现类,完成业务的可维护性和可扩展性,比起if else 也是优雅了不少。