我对这些注释有点困惑,因为我对 Spring 很陌生。 我试着在谷歌上找到它并找到了很多答案,但我仍然没有得到明确的答案。我知道 @Component 是 @Repository、@Service 和 @Controller 的超级注释,但我仍然不确定何时使用 @Component 和何时使用 @ComponentScan 任何人都可以帮助我清楚地了解这两者注释,以及两者有何区别。
使用注释 @ComponentScan ,您可以告诉 Spring 您的 Spring 管理的组件位于何处。这些 Spring 管理的组件可以使用 @Repository、@Service、@Controller 和 @Component 进行注释。
例如 - 假设您的 spring 管理的组件位于 2 个包 com.example.test1 和 com.example.test2 中。那么你的 componentScan 就会是这样的
@ComponentScan(basePackages="com.example.test1","com.example.test2")
当然,ComponentScan 注释还有很多其他元素。
您可以在这里阅读有关它们的更多信息 - https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ComponentScan.html。
另一方面,@Component 是任何 Spring 管理的组件的通用注释。例如 - 如果您在 com.example.test1 包中创建一个名为 Test 的类,并使用 Spring @Component 进行注释。
@Component
Class Testing
{
public Testing()
{
}
public void doSomething()
{
System.out.println("do something");
}
}
按照上面的示例,在组件扫描期间,它将被拾取并添加到应用程序上下文中。
希望这能让事情变得清楚:)
简单来说, @ComponentScan 扫描基础包下指定的所有类文件,即在该包下的文件中搜索任何带有 @Component、@Repository、@Service 和 @Controller 注释的 java 文件,如果找到其中任何一个,则会将其注册到豆工厂。
将所有内容写入 XML 文件是一件痛苦的事情,您必须在其中指定每个类是什么,如果它是服务还是控制器,因此注释就出现了,以避免这种情况......在内部它做了同样的事情就像您编写了一个 xml 文件,其中提到了什么是什么
@Component 是任何 Spring 管理的类/组件的通用注释。
@Component
class YourBusinessClass {
Dependency1 dependency1;
Dependency2 dependency2;
............
}
而 @Component-Scan 注释用于扫描包中任何带注释的 java 类/文件(@Component、@Service、@Repository 等)。
@Component-scan 也将包名称作为参数。如果我们不指定它,默认情况下它会扫描当前包。
@ComponentScan("com.user.package.config1")
public class BusinessApplication {
...............
}