Spring學習第三天

SportCloud發表於2016-11-30
  • 按照型別進行匹配

    • @Autowired

  • 按照ID進行匹配

(spring中註解)@Autowired + @Qualifier(“student”) == (j2ee中註解)@Resource(name = “student”)


註解DI流程

     *  1、啟動spring容器
     * 2、把spring配置檔案中的bean例項化(person,student)
     * 3、當spring容器解析配置檔案
     *     <context:annotation-config></context:annotation-config>
     *    spring容器會在納入spring管理的bean的範圍內查詢哪些類的屬性上是否加有@Resource註解
     * 4、如果在屬性上找到@Resource註解
     *      如果@Resource的註解的name屬性的值為""
     *           則把@Resource所在的屬性的名稱和spring容器中的id作匹配
     *                  如果匹配成功,則賦值(將bean中的建立類的物件賦值給@Resource所在的屬性,完成依賴注入)
     *                  如果匹配不成功,則會按照型別進行匹配
     *                      如果匹配成功,則賦值,匹配不成功,報錯
     *      如果@Resource的註解的name屬性的值不為""
     *           則解析@Resource註解name屬性的值,把值和spring容器中的ID進行匹配
     *               如果匹配成功,則賦值
     *               如果匹配不成功,則報錯
     *               
     * 說明:
     *     註解程式碼越來越簡單,效率越來越低
     *     註解只能應用於引用型別

類掃描(好處:配置檔案中行數變少了)

    <!-- 
            component
              把一個類放入到spring容器中,該類也稱為component
              base-package 在指定的包及子包中掃描
     -->
<context:component-scan 
    base-package="com.itheima11.spring.scan.annotation"></context:component-scan>
                      
        
/**
 * @Component("ss")
 * ==
 * <bean id="ss" class="..Student">
 * 
 * @Component
 * ==
 * <bean id="student" class="..Student">
 *
 */
@Component("student")
public class Student {
    public void say(){
        System.out.println("student");
    }
}

類掃描流程

/**
 * 1、啟動spring容器
 * 2、當spring容器解析到
 *         <context:component-scan 
                base-package="com.itheima11.spring.scan.annotation">
                </context:component-scan>
       會去base-package指定的包及子包中掃描所有的類
   3、看哪些類上面是否加有@Component註解
            如果該類上面有@Component註解
               檢查該註解的value屬性是否為""
                   如果為"",則會把該註解所在的類的類名以這樣的方式
                   @Component
                   public class Person{
                   
                   }
                   ==
                   <bean id="person" class="..Person">
                  如果不為"",則以這樣的形式:
                   @Component("aa")
                   public class Person{
                   
                   }
                   ==
                   <bean id="aa" class="..Person">
    4、掃描spring容器中所有的bean,進行@Resource規則
 */

更多典型化註解

  • @Controller @Service @ Repository 與@Component用法一樣、


spring容器中xml的繼承(parent)

<bean id=”student” class=”..Person” parent=”person”></bean>

註解繼承則不需要任何改動

相關文章