在开发过程中,我们可能遇到动态获取某一个实现类的场景。
比如:对于加密EncryptionSerBpo 接口我们通常根据场景使用不同加密方式
//加密接口
public interface EncryptionSerBpo {
/**
* 加密
* @param integrityInfoVO
* @return
*/
EncryptIntegrityVO integrity(VO vo);
}
实现类一:
@Service("encryptionService_MD5_0")
public class EncryptionSerMD50BpoImpl implements EncryptionSerBpo {
@Override
public EncryptIntegrityVO integrity(VO vo) {
//这里写加密的算法内容
return vo;
}
}
实现类二:
@Service("encryptionService_SM3_0")
public class EncryptionSerSM30BpoImpl implements EncryptionSerBpo {
@Override
public EncryptIntegrityVO integrity(VO vo) {
//这里写加密算法内容
return vo;
}
}
调用类:
在调用类中,使用map注入方式,我们可以使用@Value获取配置文件中的动态码拼接后,代码会自动识别实现类中@Service()里对应的上的值,从而获取到具体实现类
public class Test {
@Value("")
private String version;
@Autowired
private Map<String,EncryptionSerBpo> encryptionSerMap;
public void (VO vo) {
EncryptionSerBpo encryptionSerBpo = encryptionSerMap.get("encryptionService_"+version);//根据version获取对应实现类
EncryptIntegrityVO encryptIntegrityVO= encryptionSerBpo.integrity(vo);
}
}