1

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

编辑:

明确地说,我希望 spring 从类路径中按需查找一个类

@Component
class Bar {

}

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

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

4

1 回答 1

1

@Component, @Repository, @Controller, @Serviceannotations 定义了 Spring IoC 容器可以“组件扫描”的各种 bean。您可以在定义 Spring 上下文时指定扫描哪个包。

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

AFAIK 在不使用注释的情况下不会自动扫描 bean。我个人喜欢这样一个事实,从类中可以明显看出它是由 IoC 容器驱动的(当您使用组件扫描时)。希望这种无注释扫描的想法永远不会渗透到 Spring 中。

编辑

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

@Configuration
public class SpringConfig{

    @Bean
    public Bar createBarBean(){
        new Bar();
    }
}

但我相信这对您来说并不方便,因为您不想显式注册每个 bean。那将是矫枉过正。

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

我不知道任何其他 bean 查找机制。

于 2014-10-07T08:35:42.480 回答