我正在学习SpringBoot,在参考文档中有一个例子,我有一个问题。文件的以下部分提到
6.使用@SpringBootApplication注释
可以使用单个@SpringBootApplication注释来启用这三个功能,即:
@EnableAutoConfiguration:启用Spring Boot的自动配置机制
@ComponentScan:在应用程序所在的包上启用@Component扫描(请参阅最佳实践)
@配置:允许在上下文中注册额外的bean或导入额外的配置类
下面的例子用它支持的任何特性来替换这个注释,这让我有点困惑。榜样
package com.example.myapplication;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration(proxyBeanMethods = false)
@EnableAutoConfiguration
@Import({ MyConfig.class, MyAnotherConfig.class })
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
示例的解释
在本例中,应用程序与任何其他Spring Boot应用程序一样,只是@Component注释类和@ConfigurationProperties注释类不会自动检测,并且用户定义的bean会显式导入(请参见@Import)。
我在上面的示例代码中看到的唯一主要区别是它没有@ComponentScan
注释。我还在SO答案的评论部分(Stephane Nicoll 5月5日17日11:07)中读到,官方不建议@Component annotation自动检测@ConfigurationProperties。因此,我的假设是,带有@ConfigurationProperties的Spring框架类不带@Component注释。
此外,我还检查了@SpringBootApplication
注释源,无法识别任何能够自动检测@ConfigurationProperties
注释类的内容。
参考文件2.8.3。启用@ConfigurationProperties注释类型部分显示以下扫描和自动检测@ConfigurationProperties的方法
@SpringBootApplication
@ConfigurationPropertiesScan({ "com.example.app", "org.acme.another" })
public class MyApplication {
}
有了这些细节,我想了解
为什么在本例中明确提到@ConfigurationProperties注释类不会自动检测到?当使用@SpringBootApplication时,@ConfigurationProperties注释类是如何自动检测的。
附加说明:我看到留档的前一个版本和当前版本之间有一点差异。以下引用缺少当前引用
请记住,@EnableConfigurationProperties注释也会自动应用于您的项目,以便从环境中配置任何带有@ConfigurationProperties注释的现有bean
以下是我从分析中了解到的情况。
@ConfigurationProperties
注释类型可以通过以下方式注册到ApplicationContext
>
用@ConfigurationProperties
注释类,注释属于@ComponentScan
(@Component
,@Service
等)的范围。根据斯蒂芬·尼科尔的评论,不推荐,这对我来说现在是有意义的。
使用注释@EnableConfigurationProperties
。为此,使用@EnableConfigurationProperties
注释的类应使用@ComponentScan
范围内的注释进行注释(@Component
,@Service
等)
使用注释@ConfigurationPropertiesScan
,并确保使用@ConfigurationProperties
注释的类置于其雷达之下。其用法类似于@ComponentScan
。
现在,当我们将@SpringBootApplication
替换为它启用并省略@ComponentScan
的单独注释时(例如),使用@ConfigurationProperties
注册类型的@ConfigurationProperties
方式(第2点)将不会工作。这可能回答了我关于为什么和如何的问题。
这可能是因为@EnableConfigurationProperties
和@ComponentScan
之间的联系对于像我这样的人来说并不明显。
附加细节。
当我们使用@EnableConfigurationProperties
时,通过注释导入的EnableConfigurationPropertiesRegistrar
类注册@ConfigurationProperties
注释类型
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(EnableConfigurationPropertiesRegistrar.class)
public @interface EnableConfigurationProperties {..}
我对Spring Boot配置有问题。 我已经使用https://start.spring.io/ 我有一个问题,配置只适用于子曲库中的类: 我尝试了annotation@ComponentScan,但没有任何帮助。 你知道我能用这个做什么吗?
和和注释之间有什么区别? 我们应该在什么时候使用它们每一个?
问题内容: 当我尝试自动装配Spring RestTemplate时,出现以下错误: 在注释驱动的环境中使用Spring 4。 我的调度程序servlet的配置如下: 我尝试自动连接RestTemplate的类如下: 问题答案: 如果未定义错误,则会看到错误 考虑在配置中定义类型为“ org.springframework.web.client.RestTemplate”的bean。 要么 找不到
问题内容: 有人可以给MWE 直接在方法上使用注释的方法吗? 我已经看到了无数的关于在类定义中使用它的示例-但还没有方法的示例。 引用文档: 这种添加到一个类定义或 一个方法 @Target(value = {TYPE, METHOD }) 因此,我认为还有一种可能性和预期的用途-但不幸的是,我无法弄清楚。 问题答案: 这里的DataSource类具有属性url,用户名,密码,driverClas
我在尝试执行此代码时遇到以下错误。 java.lang.IllegalArgumentException:在“com.app.aggregatorappaconfiguration”上找不到ConfigurationProperties注释。在org.springframework.util.assert.NotNull(assert.java:115)~[spring-core-4.3.2.re
我有一个Spring Boot应用程序,其中包含一个Spring数据Jpa存储库。我需要运行一个单元(或组件?)围绕此存储库进行测试。我对Spring数据Jpa没有太多经验。 这是我的测试。它非常简单,我无法通过。 这是其他相关的源代码。 和 我只是想把Jpa回购协议自动连接到测试中,但我做不到。很明显,我误解了Spring Boot工作原理的一些细微差别。但即使经过了一些教程,我也无法找出我遗漏