Spring beans 自动装配

  • Bean 自动装配

    您已经了解了如何使用<bean>元素声明bean以及如何使用XML配置文件中的<constructor-arg>和<property>元素注入<bean>。Spring容器可以在不使用<constructor-arg>和<property>元素的情况下自动装配协作Bean之间的关系,这有助于减少为基于Spring的大型应用程序编写的XML配置量。
  • 自动装配模式

    以下是自动装配模式,可用于指示Spring容器使用自动装配进行依赖项注入。 您可以使用<bean />元素的autowire属性为bean定义指定自动装配模式。
    1. no - 这是默认设置,表示没有自动装配,您应该使用显式的bean引用进行装配。您无需为此装配做任何特别的事情。这就是您在“依赖关系注入”一章中已经看到的内容。
    2. byName - 按属性名称自动装配。 Spring容器查看在XML配置文件中将autowire属性设置为byName的bean的属性。然后,它尝试将其属性与配置文件中由相同名称定义的bean进行匹配和关联。
    3. byType - 按属性数据类型自动装配。 Spring容器查看在XML配置文件中将autowire属性设置为byType的bean的属性。然后,如果属性的类型与配置文件中的Bean名称之一完全匹配,它将尝试匹配并装配属性。如果存在多个此类bean,则会引发致命异常。
    4. constructor - 与byType相似,但type适用于构造函数参数。如果容器中不存在构造函数参数类型的一个bean,则将引发致命错误。
    5. autodetect - Spring首先尝试通过构造函数使用autowire进行连线,如果它不起作用,Spring尝试通过byType自动进行连线。
    您可以使用byType或constructor自动装配模式来装配数组和其他类型化集合。
  • 自动装配的局限性

    当在项目中一致使用自动装配时,自动装配效果最佳。 如果通常不使用自动装配,则开发人员仅使用自动装配来装配一个或两个bean定义可能会造成混淆。 虽然自动装配可以大大减少指定属性或构造函数参数的需要,但是在使用自动装配之前,您应该考虑自动装配的局限性和缺点。
    局限性 描述
    可被覆盖 您仍然可以使用<constructor-arg>和<property>设置指定依赖项,这些设置将始终覆盖自动装配。
    原始数据类型 您不能自动装配所谓的简单属性,例如基元,字符串和类。
    令人难以理解的自由 自动装配的准确性不如显式装配,因此,如果可能的话,最好使用显式装配。