为了避免混淆,我们应该理解, 配置定义 和 bean定义 是两 件事 。定义配置的三种方法,默认情况下在Spring 4中可用:
- 基于xml的 配置,当您在xml文件中描述配置时;
- 基于Java的 配置,当配置为Java类时,标有特定的注释;
- 基于groovy的 配置,当配置是带有Groovy代码的文件时;
有两种方法可以将bean定义添加到应用程序中:
- 在 bean定义中进行 配置 ,当您在配置中通过声明手动添加bean时。
在这种情况下,定义将基于配置类型。对于xml-config,它将是
<bean/>标签,对于基于Java的config-具有Groovy
@Bean注释和
beans {...}构造的方法。- 基于注解的 bean定义,当你标记bean类与特定的注解(如
@Component
,@Service
,@Controller
等)。这种类型的配置使用类路径扫描。
在这种情况下,您必须指定用于扫描类路径的指令。对于xml-config
<context:component-scan base-package="..."/>,对于Java-config-
@ComponentScan注解,对于Groovy
ctx.'component-scan'(...)调用,它将为。
如您所见,您可以使用不同组合的配置和Bean定义。
请注意,如果您使用基于XML配置,你可以选择的方式来驱动的依赖注入:手动XML,或通过使用注释(
@Autowire,
@Required等)。在后一种情况下,您必须定义
<context:annotation-config/>。但是不要混淆bean的定义和依赖注入控制。
现在,基于这种观点,让我们尝试回答您的问题:
为什么(所谓的)基于注释的配置实际上使用ClassPathXmlApplicationContext而不使用上面的AnnotationConfigApplicationContext?
本书的作者混淆了一些概念。实际上,这是基于XML的配置,具有基于注释的Bean定义。
本书中解释的基于Java的配置似乎应该称为基于注释的配置。
没错-
基于Java的配置实际上确实使用注释,因此可以称为基于注释。但是注释是Java的一部分。另外,这是一个传统术语,在documentation中指定。
有多少种方法来配置Spring框架?
因此,默认情况下,我们有三种描述配置的方法和两种定义bean的方法。这意味着配置Spring框架的六种方法(默认情况下)。但是,当然,所有这些方式都可以相互结合使用。



