Component-Scan 和 @Component 之间的区别?

问题描述 投票:0回答:3

我对这些注释有点困惑,因为我对 Spring 很陌生。 我试着在谷歌上找到它并找到了很多答案,但我仍然没有得到明确的答案。我知道 @Component 是 @Repository、@Service 和 @Controller 的超级注释,但我仍然不确定何时使用 @Component 和何时使用 @ComponentScan 任何人都可以帮助我清楚地了解这两者注释,以及两者有何区别。

spring annotations
3个回答
5
投票

使用注释 @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");
           }

    }

按照上面的示例,在组件扫描期间,它将被拾取并添加到应用程序上下文中。

希望这能让事情变得清楚:)


3
投票

简单来说, @ComponentScan 扫描基础包下指定的所有类文件,即在该包下的文件中搜索任何带有 @Component、@Repository、@Service 和 @Controller 注释的 java 文件,如果找到其中任何一个,则会将其注册到豆工厂。

将所有内容写入 XML 文件是一件痛苦的事情,您必须在其中指定每个类是什么,如果它是服务还是控制器,因此注释就出现了,以避免这种情况......在内部它做了同样的事情就像您编写了一个 xml 文件,其中提到了什么是什么


0
投票

@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 {
...............
}
© www.soinside.com 2019 - 2024. All rights reserved.