猿问

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

我想测试一个简单关闭应用程序的类:


@Component

public 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 吗?


爪哇春天弹簧靴


波斯汪
浏览 97回答 1
1回答

慕仙森

它这样做是因为它是这样@SpringBootApplication工作的。@SpringBoot应用程序:这是一个方便的注释,等效于声明 @Configuration、@EnableAutoConfiguration 和@ComponentScan。@组件扫描如果未定义特定包,将从声明此注解的类的包进行扫描。因此,ShutdownManagerTest 的同一个包或子包中的所有内容都将被提取。
随时随地看视频慕课网APP

相关分类

Java
我要回答