zoukankan      html  css  js  c++  java
  • Spring 自动装配

    1. 什么是自动装配?

    Spring 容器可以在不使用 元素的情况下自动装配相互协作的 bean 之间的关系,这有助于减少编写一个大的基于 Spring 的应用程序的 XML 配置的数量。

    2. 自动装配的模式

    • no:这是默认的设置,它意味着没有自动装配,你应该使用显式的bean引用来连线。你不用为了连线做特殊的事。在依赖注入章节你已经看到这个了。
    • byName:由属性名自动装配。Spring 容器看到在 XML 配置文件中 bean 的自动装配的属性设置为 byName。然后尝试匹配,并且将它的属性与在配置文件中被定义为相同名称的 beans 的属性进行连接。
    • byType:由属性数据类型自动装配。Spring 容器看到在 XML 配置文件中 bean 的自动装配的属性设置为 byType。然后如果它的类型匹配配置文件中的一个确切的 bean 名称,它将尝试匹配和连接属性的类型。如果存在不止一个这样的 bean,则一个致命的异常将会被抛出。
    • constructor:类似于 byType,但该类型适用于构造函数参数类型。如果在容器中没有一个构造函数参数类型的 bean,则一个致命错误将会发生。
    • autodetect:Spring首先尝试通过 constructor 使用自动装配来连接,如果它不执行,Spring 尝试通过 byType 来自动装配。

    3. Spring 自动装配 ‘byName’

    这种模式由属性名称指定自动装配。Spring 容器看作 beans,在 XML 配置文件中 beans 的 auto-wire 属性设置为 byName。
    然后,它尝试将它的属性与配置文件中定义为相同名称的 beans 进行匹配和连接。
    如果找到匹配项,它将注入这些 beans,否则,它将抛出异常

      <!-- Definition for textEditor bean -->
       
       <bean id="textEditor" class="com.tutorialspoint.TextEditor" 
          autowire="byName">
          <property name="name" value="Generic Text Editor" />
       </bean>
    
       <!-- Definition for spellChecker bean -->
       <bean id="spellChecker" class="com.tutorialspoint.SpellChecker">
       </bean>
    

    4. Spring 自动装配 ‘byType’

    这种模式由属性类型指定自动装配。Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 byType。
    然后,如果它的 type 恰好与配置文件中 beans 名称中的一个相匹配,它将尝试匹配和连接它的属性。
    如果找到匹配项,它将注入这些 beans,否则,它将抛出异常。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
       <!-- Definition for textEditor bean -->
       <bean id="textEditor" class="com.tutorialspoint.TextEditor" 
          autowire="byType">
          <property name="name" value="Generic Text Editor" />
       </bean>
    
       <!-- Definition for spellChecker bean -->
       <bean id="SpellChecker" class="com.tutorialspoint.SpellChecker">
       </bean>
    
    </beans>
    

    5. Spring 由构造函数自动装配

    这种模式与 byType 非常相似,但它应用于构造器参数。Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 constructor。
    然后,它尝试把它的构造函数的参数与配置文件中 beans 名称中的一个进行匹配和连线。
    如果找到匹配项,它会注入这些 bean,否则,它会抛出异常。

    package com.tutorialspoint;
    public class TextEditor {
       private SpellChecker spellChecker;
       private String name;
       public TextEditor( SpellChecker spellChecker, String name ) {
          this.spellChecker = spellChecker;
          this.name = name;
       }
       public SpellChecker getSpellChecker() {
          return spellChecker;
       }
       public String getName() {
          return name;
       }
       public void spellCheck() {
          spellChecker.checkSpelling();
       }
    }
    
    
    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
       <!-- Definition for textEditor bean -->
       <bean id="textEditor" class="com.tutorialspoint.TextEditor" 
          autowire="constructor">
          <constructor-arg value="Generic Text Editor"/>
       </bean>
    
       <!-- Definition for spellChecker bean -->
       <bean id="SpellChecker" class="com.tutorialspoint.SpellChecker">
       </bean>
    
    </beans>
    

    6. autodetect

    Spring首先尝试通过 constructor 使用自动装配来连接,
    如果它不执行,Spring 尝试通过 byType 来自动装配。

  • 相关阅读:
    HDU 2639 Bone Collector II (01背包,第k解)
    POJ 2184 Cow Exhibition 奶牛展(01背包,变形)
    hihoCoder #1165 : 益智游戏 (挑战赛11 B题)
    UVA 562 Dividing coins 分硬币(01背包,简单变形)
    POJ Charm Bracelet 挑饰品 (常规01背包)
    hiho一下 第四十四周 博弈游戏·Nim游戏(直接公式解)
    UVA 624 CD(01背包,要记录路径)
    118 Pascal's Triangle 帕斯卡三角形 杨辉三角形
    117 Populating Next Right Pointers in Each Node II 每个节点的右向指针 II
    116 Populating Next Right Pointers in Each Node 每个节点的右向指针
  • 原文地址:https://www.cnblogs.com/0ffff/p/11370287.html
Copyright © 2011-2022 走看看