我为此奋斗了几个小时,但无法确定我的设置有什么问题...
当前,在TestController
中,引擎字段标记有错误
“无法自动装配。找不到'ServerEngine'类型的bean”。
我已经尝试用@SpringBootApplication
,@Configuration
和@EnableAutoConfiguration
替换@ComponentScan
,但仍然收到错误。
以下是相关文件:
应用程序
@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>
最佳答案
在main
中,您要实例化ApplicationContext applicationContext
,但是随后您对其不执行任何操作-您不会将其传递给SpringApplication
。
我对Spring Boot不熟悉,但是在您的代码中也看不到将XML配置的名称赋予SpringApplication
的任何地方。因此,它可能仅使用注释配置。
最后,由于ServerEngine
没有用@Service
注释,因此在组件扫描期间不会将其实例化为Spring bean。