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

Man*_*tel 1 spring annotations

我对这些注释有点困惑,因为我对 Spring 很陌生。我试图在谷歌上找到它并找到了很多答案,但仍然没有弄清楚。我开始知道@Component 是@Repository、@Service 和@Controller 的超级注释,但我仍然怀疑何时使用@Component 以及何时使用@ComponentScan 谁能帮我清楚地了解这两者注释,以及两者的区别。

Ind*_*nde 5

使用注解 @ComponentScan ,你可以告诉 Spring 你的 Spring 管理的组件在哪里。这些 Spring-Managed 组件可以使用 @Repository、@Service、@Controller 和当然的 @Component 进行注释。

例如 - 假设您的 spring 管理组件位于 2 个包 com.example.test1 和 com.example.test2 中。那么你的 componentScan 将是这样的

                @ComponentScan(basePackages="com.example.test1","com.example.test2")
Run Code Online (Sandbox Code Playgroud)

当然,注释 ComponentScan 有很多其他元素。

您可以在此处阅读有关它们的更多信息 - https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ComponentScan.html

另一方面,@Component 是任何 Spring-Managed 组件的通用注解。例如 - 如果您在包 com.example.test1 中创建一个名为 Testing 的类并使用 Spring @Component 进行注释。

             @Component    
             Class Testing    
     {

             public Testing()
            {
            }

            public void doSomething()
           {
            System.out.println("do something");
           }

    }
Run Code Online (Sandbox Code Playgroud)

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

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