He creado una prueba unitaria simple pero IntelliJ la resalta incorrectamente en rojo. marcándolo como un error
¿Sin frijoles?
Como puede ver a continuación, pasa la prueba? ¿Entonces debe ser Autowired?
He creado una prueba unitaria simple pero IntelliJ la resalta incorrectamente en rojo. marcándolo como un error
¿Sin frijoles?
Como puede ver a continuación, pasa la prueba? ¿Entonces debe ser Autowired?
Respuestas:
Tuve este mismo problema al crear una aplicación Spring Boot usando su @SpringBootApplication
anotación. Esta anotación representa @Configuration
, @EnableAutoConfiguration
y de @ComponentScan
acuerdo con la referencia de primavera .
Como se esperaba, la nueva anotación funcionó correctamente y mi aplicación se ejecutó sin problemas, pero Intellij siguió quejándose de las @Autowire
dependencias incumplidas . Tan pronto como cambié a usar @Configuration
, @EnableAutoConfiguration
y por @ComponentScan
separado, los errores cesaron. Parece que Intellij 14.0.3 (y muy probablemente, versiones anteriores también) aún no está configurado para reconocer la @SpringBootApplication
anotación.
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.
Recuerda siempre ...
El hombre siempre es más grande que la máquina.
@SpringBootApplication
recibí este error. Seguí el consejo de @ Jaõs Matos usando el scanBasePackages
parámetro @SpringBootApplication
y especifiqué el paquete / espacios de nombres que deberían escanearse.
Agregue la anotación Spring @Repository
sobre la clase de repositorio.
Sé que debería funcionar sin esta anotación. Pero si agrega esto, IntelliJ no mostrará error.
@Repository
public interface YourRepository ...
...
Si usa Spring Data con la Repository
clase extendida , serán paquetes de conflictos. Luego debe indicar paquetes de explicidad.
import org.springframework.data.repository.Repository;
...
@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
...
}
Y luego puede conectar automáticamente su repositorio sin errores.
@Autowired
YourRepository yourRepository;
Probablemente no sea una buena solución (supongo que está intentando registrar el repositorio dos veces). Pero trabaja para mí y no muestres errores.
Quizás en la nueva versión de IntelliJ se pueda arreglar: https://youtrack.jetbrains.com/issue/IDEA-137023
Mi versión de IntelliJ IDEA Ultimate (2016.3.4 Build 163) parece admitir esto. El truco es que debes haber habilitado el complemento Spring Data.
En ocasiones, debe indicar 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 a @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.
@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"})
y aunque la aplicación funcionó bien, a intellij no le gustó. Cambiando a @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})
arreglado para mí!
Siempre resuelvo este problema haciendo lo siguiente ... Configuración> Inspecciones> Spring Core> Código de lo que cambia de error a advertencia de la opción de gravedad
Estoy usando spring-boot 2.0 e intellij 2018.1.1 ultimate edition y me enfrenté al mismo problema.
Resolví colocando @EnableAutoConfiguration en la clase de aplicación principal
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration
¯ \ _ (ツ) _ / ¯
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 desea realizar ningún cambio en su código solo para hacer feliz su IDE. Lo resolví agregando todos los componentes a la faceta Spring.
Mientras sus pruebas pasen, es bueno, presione alt + enter
colocando el cursor sobre el error y dentro del submenú del primer elemento que encontrará, Disable Inspection
seleccione que
Tuve un problema similar en la aplicación Spring Boot. La aplicación utiliza Feign (cliente HTTP que sintetiza solicitudes de interfaces anotadas). Con la interfaz SomeClient
anotada @FeignClient
, Feign genera una clase de proxy de tiempo de ejecución que implementa esta interfaz. Cuando algún componente Spring intenta conectar automáticamente un bean de tipo SomeClient
, Idea se queja de que no se haya SomeClient
encontrado ningún bean de tipo ya que en realidad no existe una clase real en el proyecto y a Idea no se le enseña a entender la @FeignClient
anotación de ninguna manera.
Solución: anote la interfaz SomeClient
con @Component
. (En nuestro caso, no usamos @FeignClient
anotación SomeClient
directamente, sino que usamos metaanotación @OurProjectFeignClient
que está anotada @FeignClient
y agregar @Component
anotación también funciona).
@Component
a la interfaz resuelve el problema. Pero creo que esta no es la forma correcta ... En mi opinión, esto es un error en IntelliJ IDEA o, por no ser tan difícil, IntelliJ IDEA no está listo para las nuevas versiones de Feign. Funciona sin @Component
versiones anteriores falsas (donde estaba la @FeignClient
anotación en org.springframework.cloud.netflix.feign
lugar de org.springframework.cloud.openfeign
, ¿tal vez esta es la causa del problema?). ¿Ha encontrado más detalles (tal vez un boleto de error) para esto?
@Component
) es @FeignClient
del org.springframework.cloud.netflix.feign
paquete.
Y una última información importante: agregue la información ComponentScan
para que la aplicación conozca las cosas que necesita conectar. Esto no es relevante en el caso de esta pregunta. Sin embargo, si no @autowiring
se está realizando ninguna, entonces esta es probablemente su solución.
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
Lo que debes hacer es agregar
@ComponentScan("package/include/your/annotation/component")
en AppConfiguration.java
.
Como creo que su AppConfiguraion.java
paquete es más profundo que su componente de anotación (paquete @Service, @Component ...),
tales como "package/include/your/annotation/component/deeper/config"
.
Tuve un problema similar en mi aplicación. Cuando agregué anotaciones, el resaltado incorrecto desapareció.
@ContextConfiguration(classes = {...})
Estoy usando esta anotación para ocultar este error cuando aparece en IntelliJ v.14:
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Para mí, la solución era colocarla @EnableAutoConfiguration
en la clase Aplicación debajo de la que @SpringBootApplication
iba a subrayar porque es redundante. ¡Elimínelo y listo, todas sus advertencias sobre los frijoles faltantes desaparecen! Primavera tonta ...
¡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 con cable automático que faltaba manualmente!
(acceso a través del menú Estructura del proyecto o la ventana de herramientas de Spring ... editar "Contexto de aplicación Spring")
Entonces, en lugar de SpringApplicationContext que solo contiene mi configuración de primavera ExampleApplication, también contiene el Bean que falta:
SpringApplicationContext:
et voilà: ¡El mensaje de error desapareció!
¿Esto todavía 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 guarde nuevamente, esto soluciona el problema.
Solo tuve que usar @EnableAutoConfiguration para abordarlo, sin embargo, este error no tuvo un impacto funcional.
Se puede resolver colocando @EnableAutoConfiguration en la clase principal de la aplicación de arranque de primavera.
A veces, en mi caso, la razón es una importación incorrecta. Importé accidentalmente
import org.jvnet.hk2.annotations.Service
en vez de
import org.springframework.stereotype.Service
al aceptar ciegamente la primera opción en las importaciones sugeridas de Idea. Me tomó unos minutos la primera vez que sucedió :-)
Sorprendentemente, un proyecto orientado a Feign que se ejecutó con éxito con Eclipse no pudo ejecutarse en InteliJ. Cuando inició la aplicación, InteliJ se quejó del cliente Feign que intenté inyectar en la capa serviceImpl diciendo: field personRestClient (mi cliente Feign) en ... requería un bean de tipo ... que no se pudo encontrar. Considere definir un bean de tipo '...' en su configuración.
Perdí mucho tiempo tratando de entender lo que está mal. Encontré una solución (para InteliJ) que no entiendo completamente:
O elija Eclipse :)
Use @AutoConfigureMockMvc para la clase de prueba.
simple tienes que hacer 2 pasos
==>> change @Autowired to @Resource
IntelliJ IDEA Ultimate
Agregue su clase principal al contexto de aplicación IntelliJ Spring, por ejemplo Application.java
File
-> Project Structure..
lado izquierdo: Configuración del proyecto -> Módulos
lado derecho: busque en la estructura de su paquete
Spring
y agregue+
Application.java