working qualifier not injecting ejemplo bean spring spring-mvc spring-boot

qualifier - autowired spring java



Spring Boot @autowired no funciona, clases en un paquete diferente (8)

Cuando usa la anotación @SpringBootApplication en, por ejemplo, el paquete

com.company.config

automáticamente hará la exploración de componentes de esta manera:

@ComponentScan("com.company.config")

Por lo tanto, NO analizará paquetes como com.company.controller, etc. Es por eso que debe declarar su @SpringBootApplication en el paquete un nivel antes de sus paquetes normales como este: com.company O use la propiedad scanBasePackages, como esto:

@SpringBootApplication(scanBasePackages = { "com.company" })

O componentScan:

@SpringBootApplication @ComponentScan("com.company")


Tengo una aplicación de arranque de primavera.

Obtuve el siguiente error

org.springframework.beans.factory.BeanCreationException: Error al crear bean con el nombre ''birthdayController'': error en la inyección de dependencias con conexión automática; la excepción anidada es org.springframework.beans.factory.BeanCreationException: No se pudo establecer automáticamente el campo: com.esri.birthdays.dao.BirthdayRepository com.esri.birthdays.controller.BirthdayController.repository; la excepción anidada es org.springframework.beans.factory.NoSuchBeanDefinitionException: No se ha encontrado ningún bean calificado de tipo [com.esri.birthdays.dao.BirthdayRepository] para dependencia: se esperaba al menos 1 bean que califica como candidato de esta dependencia. Anotaciones de dependencia: {@ org.springframework.beans.factory.annotation.Autowired (required = true)} en org.springframework.beans.factory.annotation.AutowiredAnnotationPacioPreesPasas de la mano de la persona de la que se trata. .4.RELEASE.jar: 4.2.4.RELEASE] en org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1214) ~ [spring-beans-4.2.4.RELEASE.jar. 4.RELEASE] en org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:543) ~ [spring-beans-4.2.4.RELEASE. beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:482) ~ [spring-beans-4.2.4.RELEASE.jar.p.p.p.p.ppl. getObject (AbstractBeanFactory.java:306) ~ [spring-beans-4.2.4.RELEASE.jar: 4.2.4.RELEASE] en o

El siguiente es el código de mi clase de repositorio

package com.esri.birthdays.dao; import com.esri.birthdays.model.BirthDay; public interface BirthdayRepository extends MongoRepository<BirthDay,String> { public BirthDay findByFirstName(String firstName); }

Siguiente es el controlador.

package com.esri.birthdays.controller; @RestController public class BirthdayController { @Autowired private BirthdayRepository repository;

Funciona si están en el mismo paquete. No estoy seguro de por qué


Definitivamente habrá un bean que también contenga campos relacionados con el cumpleaños. Por lo tanto, use esto y su problema se resolverá

@SpringBootApplication @EntityScan("com.java.model*") // base package where bean is present public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }


En mi caso, @component no estaba funcionando porque inicialicé esa instancia de clase usando el new <classname>() .

Si iniciamos la instancia mediante Java convencional en cualquier lugar del código, Spring no agregará ese componente en el contenedor IOC.


Intente anotar su (s) clase (s) de configuración con la @ComponentScan("com.esri.birthdays") . Generalmente se habla: si tiene subpaquetes en su proyecto, entonces debe buscar sus clases relevantes en la raíz del proyecto. Supongo que para tu caso será "com.esri.birthdays". No necesitará el ComponentScan, si no tiene sub-paquetes en su proyecto.


Para este tipo de problema, terminé poniendo la anotación @Service en la clase de servicio recién creada y luego recogí el autowire. Por lo tanto, intente verificar las clases que no se están conectando automáticamente, si necesitan las anotaciones requeridas correspondientes (como @Controller , @Service , etc.) aplicadas y luego intente volver a generar el proyecto.


Prueba esto:

@Repository @Qualifier("birthdayRepository") public interface BirthdayRepository extends MongoRepository<BirthDay,String> { public BirthDay findByFirstName(String firstName); }

Y al inyectar el frijol:

@Autowired @Qualifier("birthdayRepository") private BirthdayRepository repository;

Si no, revise su CoponentScan en su configuración.


Simplemente coloque los paquetes dentro de la etiqueta @SpringBootApplication.

@SpringBootApplication(scanBasePackages = { "com.pkg1", "com.pkg2", .....})

Házmelo saber.


Spring Boot manejará esos repositorios automáticamente siempre que estén incluidos en el mismo paquete (o un subpaquete) de su clase @SpringBootApplication. Para tener más control sobre el proceso de registro, puede usar la anotación @EnableMongoRepositories. Spring.io guías

@SpringBootApplication @EnableMongoRepositories(basePackages = {"RepositoryPackage"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }