为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Boot 试图解析不在我的 xml 中的 bean

Spring Boot 试图解析不在我的 xml 中的 bean

波斯汪 2023-02-16 16:12:37
我想测试一个简单关闭应用程序的类:@Componentpublic class ShutdownManager {    @Autowired    private ApplicationContext applicationcontext;    public int shutdown(int returnCode) {        return SpringApplication.exit(applicationcontext, () -> returnCode);    }}我创建的测试用例是这样的:public class ShutdownManagerTest {    @Test    public void should_shutdown_gracefully() {        SpringApplication app = new SpringApplication(TestClass.class);        ConfigurableApplicationContext context = app.run();        ShutdownManager shutdownManager = (ShutdownManager)context.getBean("shutdownManager");        int result = shutdownManager.shutdown(10);        assertThat(result).isEqualTo(10);    }    @SpringBootApplication    @ImportResource("classpath:/core/shutdownmanagertest.xml")    private static class TestClass {        public TestClass() {        }        public static void main(String[] args) {        }    }}我的 shutdownmanagertest.xml 只包含一个 bean:<?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="shutdownManager" class="com.mycodebase.ShutdownManager" /></beans>但是,当我运行它时,它会抱怨:Field myOtherService in com.mycodebase.MyTask required a bean of type 'com.mycodebase.MyOtherService ' that could not be found.MyTask 类位于 ShutdownManager 的同一个包中,其中包含一个字段 myOtherService,该字段具有 @Autowire 注释。但它没有在我的测试 xml 中定义,它只包含一个 bean。有人可以帮助我理解为什么它会尝试解析不在上下文中的 bean 吗?爪哇春天弹簧靴
查看完整描述

1 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

它这样做是因为它是这样@SpringBootApplication工作的。

@SpringBoot应用程序

这是一个方便的注释,等效于声明 @Configuration、@EnableAutoConfiguration 和@ComponentScan

@组件扫描

如果未定义特定包,将从声明此注解的类的包进行扫描

因此,ShutdownManagerTest 的同一个包或子包中的所有内容都将被提取。


查看完整回答
反对 回复 2023-02-16
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信