我可以在没有注释组件扫描,自动配置,配置,springbootapplication的情况下从Spring启动应用程序开始吗?

时间:2017-03-21 04:35:34

标签: spring spring-boot

我已经编写了一些代码,用于与mongoDB进行测试集成。请在下面找到运行此Spring启动应用程序的主要方法的链接,

https://github.com/siva54/simpleusercontrol/blob/master/src/main/java/com/siva/UserManagementApplication.java

根据我的阅读,应用程序应包含以下URL中的任何配置,以声明应用程序如何管理上下文,

http://docs.spring.io/autorepo/docs/spring-boot/current/reference/html/using-boot-using-springbootapplication-annotation.html

我还没有使用任何这些上下文,但我的应用程序运行正常,我能够毫无问题地运行它。我在这里错过了什么吗?您能否帮助我了解我的应用程序如何自动启动和管理上下文/依赖项?

提前致谢

1 个答案:

答案 0 :(得分:12)

@SpringBootApplication相当于@Configuration@EnableAutoConfiguration@ComponentScan。让我们考虑一下为什么你的应用程序在没有任何这三个注释的情况下工作。

为什么没有@Configuration的情况下有效:

当Spring将扫描包时,它将找到标有@Configuration的所有类,并将它们用作配置的一部分。但是在下一行中,您手动将UserManagementApplication作为配置源传递:

SpringApplication.run(UserManagementApplication.class, args);

所以春天不需要通过扫描找到这个类。因此,没有必要通过@Configuration标记它。

为什么没有@ComponentScan的情况下有效:

班级UserManagementApplication@ImportResource("classpath:spring/application-context.xml")注释。这意味着文件spring/application-context.xml将包含在配置中。此文件包含下一行:

<context:component-scan base-package="com.siva.*" />

因此,您不需要为扫描包使用注释,因为您已经在xml文件中声明了它。

为什么没有@EnableAutoConfiguration的情况下有效:

此注释允许Spring自动尝试猜测和配置组件。例如,如果您在build.gradle中包含以下依赖项:

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-data-mongodb'
}

Spring自动配置使用MongoDB所需的所有组件。您只需在aplication.proprties文件中指定主机和用户/传递。

但您更愿意在spring/application-context.xml文件中手动声明所有需要的bean。因此,您根本不需要@EnableAutoConfiguration注释。