-
按照型別進行匹配
-
@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>