spring - 我可以从没有注释 componentscan,autoconfiguration,configuration,springbootapplication 的 spring boot 应用程序开始吗?

标签 spring spring-boot

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

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

我没有使用过任何这些上下文,但是我的应用程序运行良好,我可以毫无问题地运行它。我在这里错过了什么吗?您能否提供有关我的应用程序如何自动启动和管理上下文/依赖项的信息?

提前致谢

最佳答案

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

为什么它可以在没有 @Configuration 的情况下工作:

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

SpringApplication.run(UserManagementApplication.class, args);

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

为什么它可以在没有 @ComponentScan 的情况下工作:

类(class)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注释。

关于spring - 我可以从没有注释 componentscan,autoconfiguration,configuration,springbootapplication 的 spring boot 应用程序开始吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42918538/

相关文章:

java - 限制每个资源的最大文件大小

java - 如何设置 myweb.property 的位置以便 AnnotationConfigWebApplicationContext getEnvironment 可以找到它?

java - Spring Webflow适合异步吗?流量?

java - Spring批处理: org. springframework.beans.factory.BeanCreationException:使用JobScope时创建名称为 'scopedTarget.writer'的bean时出错

mysql - 如何为 Spring Boot 应用程序创建 Dockerfile?

java - 通过 ThreadPoolTask​​Executor 或 ThreadPoolExecutorFactoryBean 创建线程池?

java - 无法在build.gradle中初始化flyway {}

angular - 如何使用 Spring boot 和 Angular 应用程序隐藏授权 header

java - Spring Boot - 配置和初始化多个数据源

java - Spring Boot JNDI应用程序设置