Dependency injection 什么';spring中@Component的用法是什么?

Dependency injection 什么';spring中@Component的用法是什么?,dependency-injection,guice,autowired,spring-ioc,Dependency Injection,Guice,Autowired,Spring Ioc,Guice没有类似的概念。例如,Guice可以使用默认构造函数自动注入任何类,而不需要任何特殊的类注释。为什么spring在启动时必须了解每个bean? 出于自动连接的目的,spring是否可以从类路径中查找类?我能想到的一个原因是AOP。但是如果不使用AOP,整个bean定义计算会增加大量的启动时间,这是完全不必要的 编辑: 明确地说,我希望spring根据需要从类路径查找类 @Component class Bar { } @Component class Foo { @Auto

Guice没有类似的概念。例如,Guice可以使用默认构造函数自动注入任何类,而不需要任何特殊的类注释。为什么spring在启动时必须了解每个bean? 出于自动连接的目的,spring是否可以从类路径中查找类?我能想到的一个原因是AOP。但是如果不使用AOP,整个bean定义计算会增加大量的启动时间,这是完全不必要的

编辑:

明确地说,我希望spring根据需要从类路径查找类

@Component
class Bar {

}

@Component
class Foo {
    @Autowired Bar bar;
    public void doSomething() {}
}

因此,当我使用
getBean()
spring创建bean
Foo
时,它可以看到它需要一个
Bar
,因此它可以简单地在类路径上查找
Bar
。Guice就是这样做的,它避免了在开发过程中非常缓慢的不必要的组件扫描。

@component
@Repository
@Controller
@Service
注释定义了可以由Spring IoC容器进行“组件扫描”的各种bean。您可以指定在定义Spring上下文时扫描哪个包

您可以显式地使用类来创建注册Springbean。在这种情况下,您不需要使用注释

另外,如果不使用注释,就不会自动扫描bean。我个人喜欢这样一个事实:从类的角度看,它显然是由IoC容器驱动的(当您使用组件扫描时)。希望这种无注释扫描的想法永远不会渗透到Spring中

编辑

是的,它可以,但是您需要将这个类注册为bean。Java配置示例:

@Configuration
public class SpringConfig{

    @Bean
    public Bar createBarBean(){
        new Bar();
    }
}
但我相信这对您来说并不方便,因为您不想显式注册每个bean。那太过分了

以下是Spring文档的一些相关部分:


我不知道还有其他的bean查找机制。

谢谢,这回答了我的问题,但我想了解更多:当spring需要一个类自动连接到另一个类时,它可以根据需要在类路径上查找一个类吗?这将消除组件扫描。我把我的问题编辑得更具体一些。