我的做法:
在每个接口中加一个对应的标识【唯一】,如:
@Getter
public enum MessageTypeEnum {
SEND_MESSAGE_XCX("标识1","xcx"),
SEND_MESSAGE_SMS("标识2","sms"),
SEND_MESSAGE_WX("标识3","wx");
MessageTypeEnum(String name, String type) {
this.name = name;
this.type = type;
}
private String name;
private String type;
public static String judge(String type) {
for (MessageTypeEnum value : values()) {
if (value.type.equals(type)) {
return value.type;
}
}
return null;
}
}
//获取对应标识
@Override
public String getIdentification() {
return MessageTypeEnum.SEND_MESSAGE_XCX.getType();
}
//把所有接口实现注入
@Autowired
private List<SendMessageService> sendMessageServiceList;
//根据标识得到对应实例对象
@Override
public SendMessageService getMessageImpl(String messageType){
for (int i =0;i<sendMessageServiceList.size();i++){
if(messageType.equals(sendMessageServiceList.get(i).getIdentification())){
return sendMessageServiceList.get(i);
}
}
return null;
}