Springboot не может найти мой bean-компонент, несмотря на все сканирование - PullRequest
0 голосов
/ 25 февраля 2020

Итак, у меня есть класс с именем ClientFactory, который я импортирую в свой проект, используя jar. Это выглядит так:

@Component
public class ClientFactory {

    @Autowired
    private Client client;

    public ClientFactory() {
    }

    public Client get() {
        return this.client;
    }
}

и мой класс, который использует это, выглядит следующим образом:

@SpringBootApplication(scanBasePackages = {"path.to.client.*"})
@EnableAutoConfiguration
public class ProjectClient {

    @Autowired
    public ClientFactory clientFactory;

    public ProjectClient() {}

    public String getSomething(String something){

        Client client = (Client) clientFactory.get();
        return "x";

    }
}

И я вызываю этот фрагмент кода из моего тестового класса:

@SpringBootTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@Disabled
@TestPropertySource(properties = { //
        "some.property=value", //
})
public class SomeTests {

     @Autowired
     ProjectClient p;

     @Test
     public void sampleTest() throws Exception {
            p.getSomething("sample");

     }
}

и я получаю следующую ошибку:

Field clientFactory in ProjectClient required a bean of type 'ClientFactory' that could not be found.

Action:

Consider defining a bean of type 'ClientFactory' in your configuration.

Я перепробовал все комбинации сканирования объектов, компонентов и пакетов, но, похоже, ничего не работает. Приложение просто не может найти этот bean-компонент, я погуглил высоко и низко и не могу найти способ заставить это работать - я новичок в загрузке Spring - пожалуйста, помогите: (

Ответы [ 4 ]

0 голосов
/ 25 февраля 2020

Это заняло у меня слишком много времени, но я понял это. Я изменил ProjectClient следующим образом:

@Service
@ComponentScan(basePackages = {"path.to.*"})
public class ProjectClient {

Я предполагаю, что мой путь к клиенту был неверным или не обнаружим (я использовал тот же путь для импорта этого класса).

0 голосов
/ 25 февраля 2020

Я считаю, что этот класс не компилируется должным образом.

@Component
public class ClientFactory {

    @Autowired
    private Client client;

    public Factory() {

    }

    public Client get() {
        return this.client;
    }
}

В то время как имя класса равно ClientFactory , конструктор был определен как Factory , который компилятор не может скомпилировать.

Не могли бы вы изменить Factory на ClientFactory (ИЛИ Удалить конструктор по умолчанию, если вы не указали c use) и попробуйте снова

0 голосов
/ 25 февраля 2020

Создайте clientfactory с аннотацией компонента, поскольку вы ссылаетесь на clientFactory путем импорта из jar

@Bean
    public Clientfactory clientfactory () {
        return new Clientfactory ();
    }
0 голосов
/ 25 февраля 2020

Похоже, вы забыли добавить @RunWith(SpringRunner.class) в свой тестовый класс.

...