Java Spring:无法自动关联字段-未找到类型为的bean

Java Spring:无法自动关联字段-未找到类型为的bean,java,spring,intellij-idea,Java,Spring,Intellij Idea,我为此苦苦挣扎了几个小时,但不知道我的设置出了什么问题 目前,在TestController中,engine字段标记有错误 无法自动连线。找不到“ServerEngine”类型的bean 我已经尝试用@Configuration、@EnableAutoConfiguration和@ComponentScan替换@springbootplication,但仍然得到错误 以下是相关文件: Application.java @SpringBootApplication public class App

我为此苦苦挣扎了几个小时,但不知道我的设置出了什么问题

目前,在TestController中,engine字段标记有错误

无法自动连线。找不到“ServerEngine”类型的bean

我已经尝试用@Configuration、@EnableAutoConfiguration和@ComponentScan替换@springbootplication,但仍然得到错误

以下是相关文件:

Application.java

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applictionContext.xml");
        SpringApplication.run(Application.class, args);
    }
}
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>
大体上,您正在实例化一个ApplicationContext ApplicationContext,但随后您对它什么也不做—您不会将它传递给SpringApplication

我不熟悉SpringBoot,但在您的代码中,我也没有看到将XML配置的名称指定给SpringApplication的地方。所以它可能只使用注释配置

最后,由于ServerEngine没有使用@Service进行注释,因此在组件扫描期间不会将其实例化为SpringBean。

主要是实例化ApplicationContext ApplicationContext,但随后您对其不做任何操作—您不会将其传递给SpringApplication

我不熟悉SpringBoot,但在您的代码中,我也没有看到将XML配置的名称指定给SpringApplication的地方。所以它可能只使用注释配置


最后,由于ServerEngine没有使用@Service注释,因此在组件扫描期间不会将其实例化为SpringBean。

最简单和最好的解决方案是使用注释@Service或@component注释应用程序中自动连接的类,如ServerEngine、UsersDal和DataLayer。如果这样做,就不必在xml或java配置中显式地为它们创建bean。

最简单、最好的解决方案是使用注释@Service或@Component对应用程序中自动连接的类(如ServerEngine、UsersDal和DataLayer)进行注释。如果这样做,就不必在xml或java配置中显式地为它们创建bean。

Spring Boot默认情况下不激活xml配置。要么通过应用程序类手动导入,要么最好使用JavaConfig。只需将@Component添加到您的ServiceEngine就足够了。@chrylis,现在错误消失了,但是,当我运行应用程序时,我在…dataaccess.ServerEngine中得到了以下错误字段dataLayer。找不到类型为“…dal.dataLayer”的bean。因为您仍然在XML中定义了该bean?那么我该怎么办呢?去掉所有XML并以独占方式使用JavaConfig。Spring Boot不会通过违约要么通过应用程序类手动导入,要么最好使用JavaConfig。只需将@Component添加到您的ServiceEngine就足够了。@chrylis,现在错误消失了,但是当我运行应用程序时,我在…dataaccess.ServerEngine中得到了以下错误字段dataLayer。找不到类型为“…dal.dataLayer”的bean。因为您仍然用XML定义了该bean?那么我应该怎么做?去掉所有XML并以独占方式使用JavaConfig。我如何将applicationContext传递给SpringApplication?对SpringBoot有更容易实现的其他建议吗?也许除了@SpringBootApplication之外,还可以向应用程序类添加注释,并放弃手动创建上下文。如何将applicationContext传递给SpringApplication?对SpringBoot有什么更容易实现的替代建议吗?也许除了@SpringBootApplication之外,还可以向应用程序类添加注释,并放弃手动创建上下文。