Исключение возникает при автопроводке класса зависимостей, имеющего параметризованный конструктор - PullRequest
0 голосов
/ 04 марта 2019

Это сообщение об ошибке, которое я получил

Unsatisfied dependency expressed through constructor argument with index 0 of type [java.lang.String]: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}] with root cause org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

ОБНОВЛЕНИЕ:
Это класс, который я пытаюсь связать автоматически. На самом деле это класс обслуживания с параметризованным конструктором.

@Component
@Scope("prototype")
public class RelatedProductService {

    private String aa;

    private String bb;

    private String cc;


    @Autowired
    public RelatedProductService(String aa, String aa, String orgId, String cc) {
        super();
        this.aa = aa;
        this.bb = bb;
        this.cc = cc;
    }

...
}

И это то место, где я хочу его использовать, класс контроллера.

@Controller("relatedProductsV1")
@RequestMapping("api/v1/related-products")
@Scope("prototype")
public class RelatedProductsController extends BaseController {

    @Autowired
    private RelatedProductService relatedProductService;

    @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public String getRelatedProducts( @RequestParam(value = "aa", required = true) String aa,
        @RequestParam(value = "bb", required = true) String bb,
        @RequestParam(value = "cc", required = true) String cc) {
 ...


        String response = relatedProductService.getRelatedProductsResponse();
...
    }
}

Надеюсь, это поможет.

Ответы [ 3 ]

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

удалить аннотации из первого класса и @Autowired private RelatedProductService relatedProductService;из второго класса, и он должен работать

С этой конструкцией вы ничего не подключаете автоматически, потому что сами запускаете «внедренный» сервис.

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

Прежде всего, спасибо всем за ваши ценные мысли / предложения, высоко ценим их всех.

Я думаю, что я, в первую очередь, допустил ошибку, когда конструктор ввел входящие в свойства свойства / конструкторы.как пользовательские параметры запроса, которые действительно не будут иметь место при загрузке контекста приложения.Идеальное использование конструктора компонента с автоматической связью было бы, когда аргументы свойств / конструктора являются константами, которые будут находиться в файле свойств.

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

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

Без особого контекста выглядело бы, как будто вы пытаетесь автоматически связать bean-компонент, у которого есть хотя бы конструктор не по умолчанию (тот, который принимает String в качестве параметра).Вы должны либо:

  • добавить конструктор по умолчанию к классу
  • добавить параметр в объявление bean-компонента (это будет зависеть от того, используете ли вы определения на основе классов XML или Java,но принцип остается прежним)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...