Spring Framework Ошибка создания компонента с именем и без соответствующего типа - PullRequest
0 голосов
/ 27 февраля 2020

Я запускаю Spring Framework и у меня возникают некоторые проблемы: После того, как я изменил структуру пакетов для моих классов @Service, @Controller, @Entity и @Repository, мой проект перестал работать. До изменения мой проект работал правильно, и теперь я не знаю, почему он не запустился.

Структура пакета была примерно такой:

  • com.sandbox.config
  • com.sandbox.service
  • com.sandbox.service.impl
  • com.sandbox.controllers
  • com.sandbox.dao
  • com.sandbox.dao.impl
  • com.sandbox.entities

И я изменил на:

  • com.sandbox.config
  • com.sandbox.business.service
  • com.sandbox.business.service.impl
  • com.sandbox.frontend.controllers
  • com.sandbox.persistency.dao
  • com.sandbox.persistency.dao.impl
  • com.sandbox.persistency.entities

Мои классы конфигурации:

SpringJdbcConfig:

package com.sandbox.config;
@Configuration
@ComponentScan(basePackages = { "com.sandbox.*" })
public class SpringJdbcConfig {...}

WebConfig:

package com.sandbox.config;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.sandbox.*" })
public class WebConfig implements WebMvcConfigurer {...}

Кто-нибудь знает, что я делаю неправильно? Я получаю эти ошибки на консоли вывода eclipse:

  1. Error creating bean with name 'staffServiceImpl': Unsatisfied dependency expressed through field 'staffDao'.
  2. No qualifying bean of type 'com.sandbox.persistency.dao.StaffDao' available: expected at least 1 bean which qualifies as autowire candidate.

И я получаю одинаковые ошибки для каждого класс моего проекта.

Ответы [ 2 ]

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

после нескольких часов поиска и тестирования я нашел решение своей проблемы. Если я изменяю структуру пакета, добавляя новый уровень пакета, Spring дублирует классы Bean , если @ComponentScan используется более одного раза . Этого не произойдет, если вы сохраните все пакеты на одном уровне. В моем случае я использовал @ComponentScan в классах SpringJdbcConfig и WebConfig.

Я настроил его так:

SpringJdbcConfig:

@ComponentScan(basePackages = { "com.sandbox.*" })
public class SpringJdbcConfig {...}

WebConfig:

@ComponentScan(basePackages = { "com.sandbox.*" })
public class WebConfig implements WebMvcConfigurer {...}

И я изменил его на:

SpringJdbcConfig:

@ComponentScan({ "com.sandbox.config", "com.sandbox.persistency.*" })
public class SpringJdbcConfig {...}

WebConfig:

@ComponentScan({ "com.sandbox.config", "com.sandbox.business.*", "com.sandbox.persistency.*", "com.sandbox.frontend.*" })
public class WebConfig implements WebMvcConfigurer {...}

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

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

Измените ComponentScan, как показано ниже, и повторите попытку:

@ComponentScan({ "com.sandbox.business.service","com.sandbox.persistency.dao" })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...