我正在苦苦挣扎几个小时,但无法确定我的设置有什么问题......
目前,在TestController
中,引擎字段标有错误
“无法自动装配。没有找到'ServerEngine'类型的bean”。
我已尝试将@SpringBootApplication
替换为@Configuration
,@EnableAutoConfiguration
和@ComponentScan
,但仍会收到错误。
以下是相关文件:
Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applictionContext.xml");
SpringApplication.run(Application.class, args);
}
}
ServerEngine.java(充当主系统的单例)
public class ServerEngine {
@Autowired
private DataLayer dataLayer;
public DataLayer getDal(){
return dataLayer;
}
@Autowired
private UsersDal usersDal;
public UsersDal getUsersDal(){
return usersDal;
}
}
TestController.java
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
ServerEngine engine;
@RequestMapping(value = "/users", method = RequestMethod.POST)
public void test(HttpServletRequest request, HttpServletResponse response){
engine.getUsersDal().addOrUpdateUser(...);
}
}
applictionContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="serverEngine" class="partners.dataaccess.ServerEngine"/>
<bean id="usersDal" class="partners.dataaccess.UsersDal"/>
<bean id="dataLayer" class="partners.dal.DataLayer">
<constructor-arg name="username" value="..."/>
<constructor-arg name="password" value="..."/>
<constructor-arg name="url" value="..."/>
</bean>
</beans>
答案 0 :(得分:4)
在main
中,您要实例化ApplicationContext applicationContext
,但之后不做任何操作 - 您不会将其传递给SpringApplication
。
我不熟悉Spring Boot,但我发现代码中没有任何地方可以为SpringApplication
提供XML配置的名称。所以它可能只使用注释配置。
最后,由于ServerEngine
未使用@Service
注释,因此在组件扫描期间不会将其实例化为Spring bean。
答案 1 :(得分:1)
最简单和最好的解决方案是使用注释@Service或@Component注释您在应用程序中自动装配的类,如ServerEngine,UsersDal和DataLayer。如果你这样做,你就不必在xml或java配置中为它们显式创建bean。