Spring的核心是控制反轉(zhuǎn)(IOC)和面向切面(AOP)
Spring的優(yōu)點(diǎn)
- 解耦
Spring就是一個(gè)容器算利,可以將所有對象創(chuàng)建和依賴關(guān)系維護(hù)燥撞,交給Spring管理
spring工廠是用于生成bean - 面向切面
Spring提供面向切面編程椒振,可以方便的實(shí)現(xiàn)對程序進(jìn)行權(quán)限攔截嘉抒、運(yùn)行監(jiān)控等功能 - 聲明式事務(wù)的支持
只需要通過配置就可以完成對事務(wù)的管理姿鸿,而無需手動(dòng)編程 - 方便測試
Spring對Junit4支持殖卑,可以通過注解方便的測試Spring程序 - 聚合
Spring內(nèi)部提供了對各種優(yōu)秀框架(如:Struts站削、Hibernate、MyBatis孵稽、Quartz等)的直接支持 - 封裝
Spring 對JavaEE開發(fā)中的一些API许起,都提供了封裝十偶,使 這些API應(yīng)用難度大大降低
控制反轉(zhuǎn)(IOC)
在IOC出現(xiàn)之前 需要用到的bean是通過new出來直接引用的,IOC控制反轉(zhuǎn)之后需要實(shí)例對象時(shí)园细,從spring工廠中獲得惦积,需要將實(shí)現(xiàn)類的全限定名稱配置到xml文件中 ,通過<bean> 配置需要?jiǎng)?chuàng)建的對象。
<bean id="用于之后從spring容器獲得實(shí)例時(shí)使用的" class="需要?jiǎng)?chuàng)建實(shí)例的全限定類名"></bean>
當(dāng)前配置bean 可以通過 applicationContext.getBean();來直接從容器中獲取猛频。
依賴注入(DI)
spring 提供依賴注入后可以直接在工廠中將dao層注入service實(shí)現(xiàn)類狮崩。
property 標(biāo)簽用于進(jìn)行屬性注入。
name屬性bean的屬性名鹿寻。
ref :另一個(gè)bean的id值的引用睦柴。
value :當(dāng)前屬性值。
集合的注入都是給<property>添加子標(biāo)簽
- 數(shù)組 <array>
- List:<list>
- Set:<set>
- Map:<map> 毡熏,map存放k/v 鍵值對坦敌,使用<entry>描述
- Properties:<props> <prop key=""></prop>
<!-- 創(chuàng)建service -->
<bean id="serviceId" class="全類名">
<property name="指定Dao名" ref="dao實(shí)例Id"></property>
</bean>
<!-- 創(chuàng)建dao實(shí)例 -->
<bean id="daoId" class="全類名"></bean>
依賴注入方式:
- 手動(dòng)裝配:一般進(jìn)行配置信息都采用手動(dòng)基于xml裝配:構(gòu)造方法、setter方法
- 基于注解裝配
構(gòu)造方法注入
構(gòu)造方法注入
* <constructor-arg> 用于配置構(gòu)造方法一個(gè)參數(shù)argument
name :參數(shù)的名稱
value:設(shè)置普通數(shù)據(jù)
ref:引用數(shù)據(jù)痢法,一般是另一個(gè)bean id值
index :參數(shù)的索引號(hào)狱窘,從0開始 。如果只有索引财搁,匹配到了多個(gè)構(gòu)造方法時(shí)蘸炸,默認(rèn)使用第一個(gè)。
type :確定參數(shù)類型
例如:使用名稱name
<constructor-arg name="name" value="thy"></constructor-arg>
<constructor-arg name="sex" value="1"></constructor-arg>
例如2:【類型type 和 索引 index】
<constructor-arg index="0" type="java.lang.String" value="1"></constructor-arg>
<constructor-arg index="1" type="java.lang.Integer" value="2"></constructor-arg>
setter方法注入
* 普通數(shù)據(jù)
<property name="" value="值">
等效
<property name="">
<value>值
* 引用數(shù)據(jù)
<property name="" ref="另一個(gè)bean">
等效
<property name="">
<ref bean="另一個(gè)bean"/>
自動(dòng)裝配是基于注解的
使用注解來取代在xml中的配置
常用的注解包括
- @Component取代<bean class="">
- @Component("id") 取代 <bean id="" class="">
- @Repository :dao層
- @Service:service層
- @Controller:web層
- @Value(" ")
- @Autowired
- @Resource("名稱")
注解使用的前提是需要在xml中開啟注解掃描
<context:component-scan base-package="com.itheima.g_annotation.a_ioc"></context:component-scan>
</beans>