Параметр 0 метода analysisRunner в ... требуется компонент типа "...", который не может быть найден - PullRequest
1 голос
/ 11 марта 2019

Среда:

jdk 11

пружинный башмак 2.1.3

Код:

 @SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
    @Bean
    public ApplicationRunner calculationRunner(Calculator calculator, 
            @Value("${lhs}") int lhs,
            @Value("${rhs}") int rhs, 
            @Value("${op}") char op) {
        return args -> calculator.calculate(lhs, rhs, op);
    }
}
public class Calculator {
    private final Collection<Operation> operations;

    public Calculator(Collection<Operation> operations) {
        this.operations = operations;
    }
    public void calculate(int lhs, int rhs, char op) {
        for (var operation : operations) {
            if (operation.handles(op)) {
                var result = operation.apply(lhs, rhs);
                System.out.printf("%d %s %d = %s%n", lhs, op, rhs, result);
                return;
            }
        }
        throw new IllegalArgumentException("Unknown operation " + op);
    }
}
public interface Operation {
    int apply(int lhs, int rhs);
    boolean handles(char op);
}
@Component
public class Addition implements Operation {
    @Override
    public int apply(int lhs, int rhs) {
        return lhs + rhs;
    }
    @Override
    public boolean handles(char op) {
        return '+' == op;
    }
}

Консоль:

 :: Spring Boot ::        (v2.1.3.RELEASE)

ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-03-11 15:16:13.709 ERROR 4652 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************
Description:    
Parameter 0 of method calculationRunner in com.example.demo.DemoApplication required a bean of type 'com.example.demo.Calculator' that could not be found.       
Action:
Consider defining a bean of type 'com.example.demo.Calculator' in your configuration.

Структура введите описание изображения здесь

Я изучаю загрузку Spring на Externalize Propertiesсм. вопрос.Я знаю, как с этим бороться.

Надеюсь, вы поможете мне решить проблему, большое спасибо.

1 Ответ

0 голосов
/ 11 марта 2019

Ваш метод calculationRunner ожидает bean-компонент типа Calculator в качестве первого аргумента. Но ваш public class Calculator не является допустимым весенним бобом. Попробуйте удалить Calculator из сигнатуры calculationRunner метода и создать объект в теле метода. Или определите Calculator как отдельный компонент Spring (т.е. добавьте @Service или аналогичную аннотацию).

...