Me encontré sin cesar problema mencionado en el título de la pregunta. Me gustaría introducir alguna DI
utilizando ia applicationContext.xml
archivo y @ImportResource
anotación. He comprobado algunas formas de pasar applicationContext.xml
ubicación para @ImportResource
, pero que no funcionan. Compilación se realiza con pruebas de apagado. He colgado por debajo de partes de algunos archivos en el árbol del proyecto y el proyecto. ¿Tiene alguna idea de cómo puedo superar el problema?
GitHubDetailsApplication
package pl.cd.githubdetails;
// imports ...
@SpringBootApplication
// doesnt work:
// @ImportResource(locations = {"applicationContext.xml"})
// @ImportResource(locations = {"classpath:applicationContext.xml"})
// @ImportResource({"classpath*:applicationContext.xml"})
@ImportResource({"/applicationContext.xml"}) // also doesnt work
public class GitHubDetailsApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(GitHubDetailsApplication.class, args);
}
}
árbol del proyecto
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="pl.cd.githubdetails"/>
</beans>
GitController
package pl.cd.githubdetails;
// imports
@RestController
public class GitController {
@Autowired
GitHttpClient gitHttpClient;
// ...
}
GitHttpClient
package pl.cd.githubdetails;
public class GitHttpClient {
// imports ...
private RestTemplate restTemplate;
public GitHttpClient() {
this.restTemplate = new RestTemplate();
}
// ...
}
EDITAR Me pila de inserción.
2019-09-19 00:25:20.413 WARN 13584 --- [main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'gitController': Unsatisfied dependency expressed through field 'gitHttpClient'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'pl.cd.githubdetails.GitHttpClient' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
2019-09-19 00:25:20.415 INFO 13584 --- [main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2019-09-19 00:25:20.425 INFO 13584 --- [main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-09-19 00:25:20.497 ERROR 13584 --- [main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Field gitHttpClient in pl.cd.githubdetails.GitController required a bean of type 'pl.cd.githubdetails.GitHttpClient' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'pl.cd.githubdetails.GitHttpClient' in your configuration.
Su controlador espera que hay un bean de tipo GitHttpClient
que será inyectada:
@Autowired
GitHttpClient gitHttpClient;
Pero no hay tal frijol. ¿Por qué? Debido a que usted no ha anotado su clase GitHttpClient
como un grano de primavera. ¿Qué puedes hacer? Anotar como una Service
o como Component
:
@Service
public class GitHttpClient {
...
}