Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @尽管@ConditionalOnProperty,但自动连线使用了错误的实现_Java_Spring Boot_Dependency Injection - Fatal编程技术网

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