-
什么是 Spring Core?
Spring core是用來負責(zé)發(fā)現(xiàn)、創(chuàng)建并處理bean之間的關(guān)系的一個工具包。core把bean的創(chuàng)建、bean的互相注入的方法定義完畢,上層服務(wù)只需要進行調(diào)用;提供功能但不調(diào)用就是spring core的存在意義。
-
容器
創(chuàng)建并管理容器
創(chuàng)建:使用反射技術(shù),創(chuàng)建bean的實例
- new ClassPathXmlApplicationContext(".xml")*:在classpath路徑下加載xml配置文件,完成Spring容器的加載;或者,采用注解方式時,需要在xml配置文件中使用context:component-scan/完成類掃描。
- new AnnotationConfigApplicationContext("")*:基于注解配置的Spring容器加載方式。
管理:Spring默認采用單例的方式管理Bean
- scope屬性為singleton(默認):每次創(chuàng)建的實例相同,獲取該Bean多次,為同一個對象(hashcode相同)。
- scope屬性為prototype(每次至少創(chuàng)建兩個實例):每次創(chuàng)建不同的實例。
- init-method:指定初始化方法。
- destroy-method:指定銷毀方法。
-
IOC或DI
IOC:Inverse Of Control(控制翻轉(zhuǎn))。對于spring框架來說,就是由spring來負責(zé)控制對象的生命周期和對象間的關(guān)系。
DI:Dependency Injection(依賴注入)。IOC的一個重點是在系統(tǒng)運行中,動態(tài)的向某個對象提供它所需要的其他對象。這一點是通過DI來實現(xiàn)的。
思想:將項目中的類(組件)交給Spring容器管理,按照組件之間彼此的依賴關(guān)系(采用xml配置文件或者注解),完成組件之間的注入,降低組件之間的耦合。
三種注入方式
- 屬性注入(setter注入):將容器中的messageServiceBean,注入給當(dāng)前Controller的messageService屬性(通過該屬性的setter)。
<property name="messageService" ref="messageServiceBean"/>
- 構(gòu)造注入(使用有參構(gòu)造方法進行注入):將容器中的messageServiceBean,注入給當(dāng)前Controller的messageService屬性(通過該屬性的setter)。
<constructor-arg name="messageService" ref="messageServiceBean"/>
<constructor-arg name="defaultMsg" value="默認消息模板"/>
- 接口注入
-
注解
聲明bean
@Component:組件
@Controller:控制器組件
@Service:業(yè)務(wù)層組件
@Repository:數(shù)據(jù)訪問層組件
聲明注入
Spring Framework:
@Autowired:自動裝配(默認按照類型自動裝配),按照當(dāng)前聲明的接口類型,在容器中查找該接口實現(xiàn)類對象bean,進行自動注入(裝配)。
@Qualifier:按照bean名稱自動裝配,與@Autowired注解配合使用。安照當(dāng)前指定的bean名稱,在容器中查找該名稱對應(yīng)的bean,進行自動注入(裝配)。
JSR:
@Resource:javax擴展包提供的注解,完成自動注入,默認按照類型自動注入,也可以使用name屬性進行按名稱自動注入。