Guice没有类似的概念。例如,Guice可以使用默认构造函数自动注入任何类,而无需任何特殊的类注释。为什么spring必须知道启动时的每个bean? 出于自动装配的目的,cant spring只是从类路径中查找类?我能想到的一个原因是AOP。但是如果你不使用AOP,整个bean定义计算会增加大量的启动时间,这是完全没必要的。
编辑:
显然,我希望spring能够根据需要从类路径
中查找一个类@Component
class Bar {
}
@Component
class Foo {
@Autowired Bar bar;
public void doSomething() {}
}
所以当我使用Foo
spring创建bean getBean()
时,可以看到它需要一个Bar
,因此它可以简单地在类路径上查找Bar
。这就是Guice所做的,它避免了在开发过程中非常慢的不必要的组件扫描。
答案 0 :(得分:1)
@Component
,@Repository
,@Controller
,@Service
注释定义了可由Spring IoC容器“组件扫描”的各种bean。您可以在定义Spring上下文时指定扫描哪个包。
您可以显式使用类来创建注册Spring bean。在这种情况下,您不需要使用注释。
AFAIK没有使用注释就没有自动扫描bean。我个人喜欢这样一个事实:从类中看它是由IoC容器驱动的(当你使用组件扫描时)。希望没有注释的扫描思想永远不会渗透到Spring中。
修改强>
是的,但是你需要将这个类注册为bean。 Java Config示例:
@Configuration
public class SpringConfig{
@Bean
public Bar createBarBean(){
new Bar();
}
}
但我相信这对你来说并不方便,因为你不想明确注册每个bean。那太过分了。
以下是Spring文档的一些相关部分:
我不知道任何其他bean查找机制。