java - application - constructor intellij
intellij diciendo incorrectamente que no se encontraron beans de tipo para repositorio autocableado (19)
He creado una prueba de unidad simple pero IntelliJ está resaltando incorrectamente en rojo. marcándolo como un error
No frijoles?
Como puede ver a continuación, ¿pasa la prueba? ¿Entonces debe ser Autowired?
A veces se requiere que indique dónde @ComponentScan debe buscar componentes. Puede hacerlo pasando los paquetes como parámetro de esta anotación, por ejemplo:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
Sin embargo, como ya se mencionó, la anotación @SpringBootApplication reemplaza @ComponentScan, por lo tanto, en tales casos debe hacer lo mismo:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
Al menos en mi caso, Intellij dejó de quejarse.
A veces, en mi caso, la razón es una importación incorrecta. Yo accidentalmente importé
import org.jvnet.hk2.annotations.Service
en lugar de
import org.springframework.stereotype.Service
al aceptar ciegamente la primera opción en las importaciones sugeridas por Idea. Me tomó unos minutos la primera vez que sucedió :-)
Agregue Spring annotation @Repository
a la clase de repositorio.
Sé que debería funcionar sin esta anotación. Pero si agrega esto, IntelliJ no mostrará el error.
@Repository
public interface YourRepository ...
...
Si usa Spring Data con la extensión de la clase Repository
, habrá paquetes de conflicto. Entonces debes indicar pagkages de explicidad.
import org.springframework.data.repository.Repository;
...
@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
...
}
Y luego puede autoconectar su repositorio sin errores.
@Autowired
YourRepository yourRepository;
Probablemente no sea una buena solución (supongo que estás intentando registrar el repositorio dos veces). Pero trabaja para mí y no muestra errores.
Tal vez en la nueva versión de IntelliJ se puede arreglar: https://youtrack.jetbrains.com/issue/IDEA-137023
Esto parece ser un error en el último IntelliJ y tiene que ver con un posible problema de almacenamiento en caché?
Si agrega la anotación @Repository como mk321 mencionado anteriormente, guarde, luego elimine la anotación y vuelva a guardar, esto soluciona el problema.
Estoy usando esta anotación para ocultar este error cuando aparece en IntelliJ v.14:
@SuppressWarnings("SpringJavaAutowiringInspection")
Estoy usando spring-boot 2.0 y intellij 2018.1.1 ultimate edition y me enfrenté al mismo problema.
Lo resolví colocando @EnableAutoConfiguration en la clase de aplicación principal
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Lo que debes hacer es agregar
@ComponentScan("package/include/your/annotation/component")
en AppConfiguration.java
.
Como creo que el AppConfiguraion.java
tu AppConfiguraion.java
es más profundo que tu paquete de componentes de anotación (@Service, @Component ...),
como "package/include/your/annotation/component/deeper/config"
.
Mi solución a este problema en mi aplicación de arranque de primavera fue abrir el contexto de la aplicación de primavera y agregar la clase para el bean autowired faltante manualmente.
(acceda a través del menú Estructura del proyecto o la ventana de la herramienta de primavera ... edite "Contexto de la aplicación de primavera")
Entonces, en lugar de SpringApplicationContext que solo contiene mi configuración de resorte ExampleApplication, también contiene el Bean que falta:
SpringApplicationContext:
- ExampleApplication.java
- MissingBeanClass.java
et voilà: ¡El mensaje de error desapareció!
Mientras que las pruebas estén pasando usted está bien, presione alt + enter
tomando el cursor sobre el error y dentro del submenú del primer elemento encontrará Disable Inspection
seleccione eso
Poner @Component
o @configuration
en su archivo de configuración de bean parece funcionar, es decir algo como:
@Configuration
public class MyApplicationContext {
@Bean
public DirectoryScanner scanner() {
return new WatchServiceDirectoryScanner("/tmp/myDir");
}
}
@Component
public class MyApplicationContext {
@Bean
public DirectoryScanner scanner() {
return new WatchServiceDirectoryScanner("/tmp/myDir");
}
}
Si no quiere hacer ningún cambio en su código solo para hacer su IDE feliz. Lo he solucionado agregando todos los componentes a la faceta Spring.
- Cree un grupo con el nombre "Servicio, procesadores y enrutadores" o cualquier nombre que desee;
- Elimine y vuelva a crear el "Contexto de la aplicación Spring" use el grupo que creó anteriormente como padre.
También me encontré con este problema y lo resolví quitando Spring Facet:
- Archivo -> Estructura del proyecto
- Seleccionar
Facets
- Eliminar Spring
¡Buena suerte!
Todo lo que necesita hacer para que esto funcione es el siguiente código:
@ComponentScan
public class PriceWatchTest{
@Autowired
private PriceWatchJpaRepository priceWatchJpaRepository;
...
...
}
Tuve un problema similar en la aplicación Spring Boot. La aplicación utiliza Feign (solicitudes de sintetización de clientes HTTP desde interfaces anotadas). Al tener la interfaz SomeClient
anotada con @FeignClient
, Feign genera una clase de proxy en tiempo de ejecución que implementa esta interfaz. Cuando algún componente de Spring intenta autoaumentar bean de tipo SomeClient
, Idea no reclama ningún bean del tipo SomeClient
encontrado ya que no existe una clase real en el proyecto y Idea no aprende a comprender la anotación de @FeignClient
de ninguna manera.
Solución: anote la interfaz SomeClient
con @Component
. (En nuestro caso, no utilizamos @FeignClient
anotación @FeignClient
en SomeClient
, preferimos usar metaannotación @OurProjectFeignClient
que tiene la anotación @FeignClient
y agregar la anotación @Component
para que funcione también).
Tuve un problema similar en mi aplicación. Cuando agregué las anotaciones, desactivé el marcado incorrecto.
@ContextConfiguration(classes = {...})
Y una última pieza de información importante: agregue el ComponentScan
para que la aplicación conozca las cosas que necesita cablear. Esto no es relevante en el caso de esta pregunta. Sin embargo, si no se está ejecutando @autowiring
, esta es probablemente su solución.
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
Tuve el mismo problema al crear una aplicación Spring Boot usando su anotación @SpringBootApplication
. Esta anotación representa @Configuration
, @EnableAutoConfiguration
y @ComponentScan
acuerdo con la referencia de primavera .
Como era de esperar, la nueva anotación funcionó correctamente y mi aplicación se ejecutó sin problemas, pero Intellij siguió quejándose de las dependencias @Autowire
no @Autowire
. Tan pronto como cambié a usar @Configuration
, @EnableAutoConfiguration
y @ComponentScan
separado, los errores cesaron. Parece que Intellij 14.0.3 (y muy probablemente también las versiones anteriores) aún no está configurado para reconocer la anotación @SpringBootApplication
.
Por ahora, si los errores te molestan tanto, vuelve a esas tres anotaciones separadas. De lo contrario, ignore Intellij ... su resolución de dependencia está configurada correctamente, ya que su prueba pasa.
Siempre recuerda ...
El hombre siempre es más grande que la máquina.