我为此苦苦挣扎了几个小时,但无法弄清楚我的设置出了什么问题...
目前,在TestController
中,engine字段被标记为错误
"could not autowire. No beans of 'ServerEngine' type found".
我已经尝试将 @SpringBootApplication
替换为 @Configuration
、@EnableAutoConfiguration
和 @ComponentScan
但仍然错误。
相关文件如下:
应用程序.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;
}
}
测试 Controller .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。
关于java - Spring:无法 Autowiring 字段 - 找不到类型的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42986085/