Spring 为什么我们在春天需要组件扫描

Spring 为什么我们在春天需要组件扫描,spring,spring-boot,Spring,Spring Boot,这个问题可能很琐碎,但我仍然找不到一个好的理由或最佳实践来支持Spring中的@ComponentScan DI仅仅通过自注释类来工作,那么为什么我们需要@ComponentScan呢 这方面的最佳实践是什么?@ComponentScan告诉Spring哪些包中有注释类,这些类应该由Spring管理 Spring需要知道哪些包包含springbean,否则您必须在xml文件中分别注册每个bean。这是@ComponentScan的用法 举个简单的例子,在com.abc.xyz;包中有一个类,并用

这个问题可能很琐碎,但我仍然找不到一个好的理由或最佳实践来支持Spring中的@ComponentScan

DI仅仅通过自注释类来工作,那么为什么我们需要@ComponentScan呢

这方面的最佳实践是什么?

@ComponentScan告诉Spring哪些包中有注释类,这些类应该由Spring管理

Spring需要知道哪些包包含springbean,否则您必须在xml文件中分别注册每个bean。这是@ComponentScan的用法

举个简单的例子,在com.abc.xyz;包中有一个类,并用@Controller注释,您必须告诉spring扫描这个包的控制器类,如果spring没有扫描这个包,那么spring将不会将它标识为控制器类

假设您正在处理配置文件

像这样,

当spring加载xml文件时,该标记将搜索包com.abc.xyz中存在的所有类,因此包含@controller、@Repository@Service等的任何类,如果找到,spring将在bean工厂中注册这些带注释的类

假设您使用的是spring启动应用程序


然后,您的spring boot应用程序被注释为The@SpringBootApplication.

@SpringBootApplication注释相当于使用@Configuration、@EnableAutoConfiguration和@ComponentScan及其默认属性

如果你没有的话,还有一点;t在@ComponentScan中指定基本包名称,
它将从@springboot应用程序所在的包中进行扫描

我知道这一点。但我的问题是,spring只能识别带有自注释的类。那么为什么我们需要componentscan呢?spring能够识别带有selfannotation的类,这仅仅意味着我没有这样做;t getI可以用@controller注释我的controller类,并且我不需要将其包传递给componentscan。它仍然有效。甚至服务存储库等都可以在没有扫描的情况下工作,所以基本上您的@Controller类在没有@ComponentScan注释或spring配置文件中的此标记的情况下工作正常。然后,您的spring引导应用程序将使用@SpringBootApplication注释@SpringBootApplication注释相当于使用@Configuration、@EnableAutoConfiguration和@ComponentScan及其默认属性:当您说“自注释”时,具体是什么意思?你的意思是向类中添加原型注释吗?为什么您认为DI仅仅通过自注释就可以工作?我尝试将autowire用于我作为服务和存储库注释的类。我不必将这些包传递给componentscan。事实上,我没有进行组件扫描。它仍然有效。因此,我认为Marly自我注释对于DI来说已经足够了。虽然我不确定我是否正确。我的意思是,当DI仅与slef注释一起工作时,选择componentscan肯定有很好的理由。您的配置是什么样子的?Spring boot?您的Spring boot配置是什么样子的?您正在使用@SpringBootApplication吗?如果是这样,则您使用的是componentscanning。我得到的信息是,无论您是否知道,您可能正在使用componetnscanning。它将从@springboot应用程序所在的包中进行扫描