Java @尽管@ConditionalOnProperty,但自动连线使用了错误的实现
我遵循了我在网上找到的教程,使用Java @尽管@ConditionalOnProperty,但自动连线使用了错误的实现,java,spring-boot,dependency-injection,Java,Spring Boot,Dependency Injection,我遵循了我在网上找到的教程,使用@ConditionalOnProperty和@Bean为@Autowired选择一个实现 为了完整性(尽管与问题无关),此操作的目的是选择一个“ICE服务器列表”提供程序-在配置文件中本地配置,或使用Twilio API获取WebRTC的STUN和TURN服务器列表 以下是相关代码: application.properties Controller.java IceProvider.java TwilioIceProvider.java 在调用iceProvi
@ConditionalOnProperty
和@Bean
为@Autowired
选择一个实现
为了完整性(尽管与问题无关),此操作的目的是选择一个“ICE服务器列表”提供程序-在配置文件中本地配置,或使用Twilio API获取WebRTC的STUN和TURN服务器列表
以下是相关代码:
application.properties
Controller.java
IceProvider.java
TwilioIceProvider.java
在调用iceProvider.getIceServers()的客户端请求时
既然只调用了twilioIceProvider
工厂方法,而localIceProvider
方法不调用,为什么localIceProvider
是@Autowired
?从IceProvider
实现中删除@Component
注释。您已经在Bean定义方法上使用@Bean
将它们声明为Bean
ice.provider = twilio
@ComponentScan
@RestController
@EnableAutoConfiguration
@EnableWebSocket
public class Controller {
@Autowired
private IceProvider iceProvider;
@Bean
@ConditionalOnProperty(name = "ice.provider", havingValue = "local")
public IceProvider localIceProvider() {
logger.info("Creating ICE server provider - LOCAL");
return new LocalIceProvider();
}
@Bean
@ConditionalOnProperty(name = "ice.provider", havingValue = "twilio")
public IceProvider twilioIceProvider() {
logger.info("Creating ICE server provider - TWILIO");
return new TwilioIceProvider();
}
}
public interface IceProvider {
List<ICEServer> getIceServers(String username);
}
@Component
public class LocalIceProvider implements IceProvider {
private final static Logger logger = Logger.getLogger(LocalIceProvider.class);
@PostConstruct
void init() {
logger.info("Reading local ICE Server list config file");
// ...
}
@Override
public List<ICEServer> getIceServers(String username) {
logger.info("Returning locally configured ICE servers");
// ...
}
}
@Component
public class TwilioIceProvider implements IceProvider {
private final static Logger logger = Logger.getLogger(TwilioIceProvider.class);
@Override
public List<ICEServer> getIceServers(String username) {
logger.info("Doing Twilio API call and returning result");
// ...
}
}
...
[2017-12-31 21:11:53 INFO ] [localhost-startStop-1] [ice.LocalIceProvider] Reading local ICE Server list config file
...
[2017-12-31 21:11:55 INFO ] [main] [com.example.Controller] Creating ICE server provider - TWILIO
...
[2017-12-31 21:14:40 INFO ] [http-nio-9083-exec-5] [ice.LocalIceProvider] Returning locally configured ICE servers