在项目中发现controller注入的service接口有两个实现类,分别为两个短信发送渠道,刚开始一直不明白spring是如何区分使用哪个实现类的,后来发现两个实现类中都加入了@Configuration和@ConditionalOnProperty这两个注解,通过@ConditionalOnProperty中name和havingValue两个属性判断哪个configuration生效。
代码如下:
application.yml
ftms:
iov:
message-type: 2
实现类
@Configuration
@ConditionalOnProperty(name = "message-type",prefix = "ftms.iov",havingValue = "2")
public class FtmsMessageManagerImpl implements MessageManager {
@Configuration
@ConditionalOnProperty(name = "message-type",prefix = "ftms.iov",havingValue = "1")
public class MessageManagerImpl implements MessageManager {
prefix代表属性前缀,name 代表属性名称,与prefix组成完整属性名,name属性值与havingValue的值进行比较,判断哪个配置生效