Java Spring:无法自动关联字段-未找到类型为的bean
我为此苦苦挣扎了几个小时,但不知道我的设置出了什么问题 目前,在TestController中,engine字段标记有错误 无法自动连线。找不到“ServerEngine”类型的bean 我已经尝试用@Configuration、@EnableAutoConfiguration和@ComponentScan替换@springbootplication,但仍然得到错误 以下是相关文件: Application.javaJava Spring:无法自动关联字段-未找到类型为的bean,java,spring,intellij-idea,Java,Spring,Intellij Idea,我为此苦苦挣扎了几个小时,但不知道我的设置出了什么问题 目前,在TestController中,engine字段标记有错误 无法自动连线。找不到“ServerEngine”类型的bean 我已经尝试用@Configuration、@EnableAutoConfiguration和@ComponentScan替换@springbootplication,但仍然得到错误 以下是相关文件: Application.java @SpringBootApplication public class App
@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之外,还可以向应用程序类添加注释,并放弃手动创建上下文。