java - Spring:无法 Autowiring 字段 - 找不到类型的 bean

标签 java spring intellij-idea

我为此苦苦挣扎了几个小时,但无法弄清楚我的设置出了什么问题...

目前,在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/

相关文章:

java - spring容器的垃圾收集

intellij-idea - 如何在 IntelliJ IDEA 中插入 Markdown 表?

GWT 开发模式性能问题?

java - 当 Java 线程设置为 null 时会发生什么?

java - 如何从 ResultSet 的行中的列获取 int[] 数组?

java - 作用域 bean : inject one into another

java - 使用 Spring 时取消存储过程调用

maven - 向现有 IntelliJ 模块添加 Maven 支持不可用

java - 当程序处于循环状态时如何发送事件?

lambda 表达式的 Java 堆转储分析