您好,登錄后才能下訂單哦!
一、基于XML的配置
采用Schema格式
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans"http://默認(rèn)命名空間,用于bean的定義 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"http://xsi標(biāo)準(zhǔn)命名空間,用于為每個(gè)文檔指定相對(duì)應(yīng)的Schema樣式文件 xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" //自定義的一種命名空間 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <bean id="car" class="com.smart.fb.Car" p:brand="紅旗CA72" p:maxSpeed="200" p:price="20000.00"/> ...... </beans>
Schema在文檔根節(jié)點(diǎn)中通過xmlns對(duì)文檔所引用的命名空間進(jìn)行聲明。文檔后面的元素可通過命名空間別名加以區(qū)分。<aop:config/>
二、Bean基本配置
<bean id="car" class="com.smart.fb.Car">
id為這個(gè)Bean的名稱,通過容器的getBean("car")即可獲取對(duì)應(yīng)的Bean,class定義了bean的實(shí)現(xiàn)類。
id的命名必須以字母開始,不能以逗號(hào)和空格結(jié)尾。但是name屬性沒有限制。
spring不允許有兩個(gè)id相同的bean,但是可以name相同。返回是返回最后一個(gè)。
三、依賴注入
屬性注入:要求bean提供一個(gè)默認(rèn)的構(gòu)造函數(shù),并有相應(yīng)的Setter方法。spring是先調(diào)用Bean的默認(rèn)構(gòu)造函數(shù)實(shí)例化Bean對(duì)象,然后通過反射調(diào)用set方法注入屬性值。但是spring只會(huì)檢查是否有對(duì)于的set方法,而有沒有該屬性不關(guān)注。
在xml中
<bean id="boss" class="com.smart.attr.Boss"> <property name="car" ref="car" /> <property name="name" value="Tom" /> <property name="age" value="45" /> </bean>
命名規(guī)范:xxx屬性對(duì)于setXxx()方法。變量前兩個(gè)字母要么都大寫要么都小寫。
2.構(gòu)造函數(shù)注入
<!--構(gòu)造函數(shù)注入:type --> <bean id="car1" class="com.smart.ditype.Car"> <constructor-arg type="java.lang.String"> <value>紅旗CA72</value> </constructor-arg> <constructor-arg type="double"> <value>20000</value> </constructor-arg> </bean> <!-- 構(gòu)造函數(shù)注入:index <bean id="car2" class="com.smart.ditype.Car"> <constructor-arg index="0" value="紅旗CA72" /> <constructor-arg index="1" value="中國一汽" /> <constructor-arg index="2" value="20000" /> </bean> --> <!--構(gòu)造函數(shù)注入:type&index --> <bean id="car3" class="com.smart.ditype.Car"> <constructor-arg index="0" type="java.lang.String"> <value>紅旗CA72</value> </constructor-arg> <constructor-arg index="1" type="java.lang.String"> <value>中國一汽</value> </constructor-arg> <constructor-arg index="2" type="int"> <value>200</value> </constructor-arg> </bean> <bean id="car4" class="com.smart.ditype.Car"> <constructor-arg index="0"> <value>紅旗CA72</value> </constructor-arg> <constructor-arg index="1"> <value>中國一汽</value> </constructor-arg> <constructor-arg index="2" type="int"> <value>200</value> </constructor-arg> </bean> <!--構(gòu)造函數(shù)注入:自動(dòng)識(shí)別入?yún)㈩愋?nbsp;--> <bean id="boss1" class="com.smart.ditype.Boss"> <constructor-arg> <value>John</value> </constructor-arg> <constructor-arg> <ref bean="car" /> </constructor-arg> <constructor-arg> <ref bean="office" /> </constructor-arg> </bean> <bean id="office" class="com.smart.ditype.Office" />
四、注入?yún)?shù)
字面值:基本數(shù)據(jù)類型及其封裝類、String類都可以采用字面值注入。通過value=""或者<value>方式來注入。<![CDATA[]]>作用是讓XML解析器把[]內(nèi)的字符串當(dāng)成普通文本對(duì)待。一般情況下XML會(huì)忽略標(biāo)簽內(nèi)部字符串的前后空格,但是在spring中不會(huì)。
引用其他bean:通過ref元素。<property name="car" ref="car"></property>或者<ref bean="car"/> bean是同一容器或者父容器中的bean,local只能引用同一配置文件中的bean,parent引用父容器的bean
內(nèi)部bean:類似內(nèi)部類,沒有名字不能被外部引用。
null值:<value></value>這樣會(huì)被解析成空字符串。<value><null/></value>這樣才是空。
集合類型屬性
<list> <value>看報(bào)</value> <value>×××</value> <value>高爾夫</value> </list> <set> <value>看報(bào)</value> <value>×××</value> <value>高爾夫</value> </set> <map> <entry > <key> <value>AM</value> </key> <value>會(huì)見客戶</value> </entry> <entry> <key> <value>PM</value> </key> <value>公司內(nèi)部會(huì)議</value> </entry> </map> <props> <prop key="jobMail">john-office@smart.com</prop> <prop key="lifeMail">john-life@smart.com</prop> </props> <bean id="parentBoss" abstract="true" class="com.smart.attr.Boss"> <property name="favorites"> <set> <value>看報(bào)</value> <value>×××</value> <value>高爾夫</value> </set> </property> </bean> <bean id="childBoss" parent="parentBoss"> <property name="favorites"> <set merge="true"> <value>爬山</value> <value>游泳</value> </set> </property> </bean>
子bean的favorites最后有5個(gè)元素。merge="true"是和父bean的同名進(jìn)行集合屬性合并。
五、bean之間的關(guān)系
1.繼承:子bean繼承父bean。重復(fù)的會(huì)覆蓋。
1)父bean:abstract="true"
2)子bean:parent="parbean"
<!-- 父子<bean> --> <bean id="abstractCar" class="com.smart.tagdepend.Car" p:brand="紅旗CA72" p:price="2000.00" p:color="黑色" abstract="true"/> <bean id="car3" parent="abstractCar"> <property name="color" value="紅色"/> </bean> <bean id="car4" parent="abstractCar" > <property name="color" value="白色"/> </bean>
2.引用
六、整合多個(gè)配置文件
通過<import>將多個(gè)配置文件引到一個(gè)文件中,進(jìn)行配置文件集成。
<import resource="classpath:com/.../bean.xml"/>
七、Bean的作用域
siglenton作用域:默認(rèn)情況下,spring的ApplicationContext容器在啟動(dòng)時(shí),會(huì)自動(dòng)實(shí)例化所有的sigleton的bean并緩存在容器中。如果不希望提前實(shí)例化,可以通過lazy-init="true"來等到使用是才實(shí)例化。
prototype作用域:scope="prototype"指定非單例作用域的Bean。
web環(huán)境下:在低版本的web,可以使用http請(qǐng)求過濾器進(jìn)行配置,高版本可以使用http請(qǐng)求監(jiān)聽器來進(jìn)行配置。
1)reqest作用域:每次http請(qǐng)求就會(huì)調(diào)用。
2)session:橫跨整個(gè)Session,Session中所有http請(qǐng)求共享一個(gè)bean。
3)glabalSession
<bean ..><aop:scoped-proxy/></bean>則注入的是動(dòng)態(tài)代理對(duì)象。
八、基于注解的配置
使用注解定義Bean:@Component表示該類為Bean。@Repository:對(duì)DAO實(shí)現(xiàn)類的標(biāo)注。
掃描注解定義的Bean:
第一步:聲明context命名空間
xmlns:context="http://www.springframework.org/schema/context"
第二部:使用component-scan的base-package屬性指定一個(gè)需掃描的包。
<context:component-scan base-package="com.smart.anno"> <context:include-filter type="aspectj" expression="com.smart.anno.*Plugin+"/> <context:include-filter type="aspectj" expression="com.smart.anno.MyComponent"/> <context:exclude-filter type="aspectj" expression="com.smart..*Controller+"/> </context:component-scan>
user-default-filters屬性默認(rèn)是掃描@Repository、@Service 和 @Controlle、@Component 除非設(shè)為false。
3.自動(dòng)裝配Bean
@Autowired默認(rèn)按類型匹配方式來找bean,找不到的時(shí)候會(huì)報(bào)異常,加上@Autowired(reqired=false)就不會(huì)拋出異常了。加上@Qualifier注解限定Bean的名稱。
對(duì)類方法進(jìn)行標(biāo)注:Spring允許對(duì)方法入?yún)?biāo)注@Qualifier以指定注入Bean的名稱。
延遲注入:@Lazy在屬性及目標(biāo)Bean類上同時(shí)標(biāo)注。
@Resource注解要求提供一個(gè)Bean的名稱。二者都可以寫在字段
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。