抖音seo排名系統(tǒng)公司影響seo排名的因素有哪些
依賴注入底層原理流程圖:
Spring中Bean的依賴注入原理| ProcessOn免費(fèi)在線作圖,在線流程圖,在線思維導(dǎo)圖
Spring中到底有幾種依賴注入的方式?
首先分兩種:
- 手動(dòng)注入
- 自動(dòng)注入
手動(dòng)注入
在XML中定義Bean時(shí),就是手動(dòng)注入,因?yàn)槭?strong>程序員手動(dòng)給某個(gè)屬性指定了值。
<bean name="userService" class="com.luban.service.UserService"><property name="orderService" ref="orderService"/>
</bean>
上面這種底層是通過(guò)set方法進(jìn)行注入。
<bean name="userService" class="com.luban.service.UserService"><constructor-arg index="0" ref="orderService"/>
</bean>
上面這種底層是通過(guò)構(gòu)造方法進(jìn)行注入。
所以手動(dòng)注入的底層也就是分為兩種:
- set方法注入
- 構(gòu)造方法注入
自動(dòng)注入
自動(dòng)注入又分為兩種:
- XML的autowire自動(dòng)注入
- @Autowired注解的自動(dòng)注入
XML的autowire自動(dòng)注入
在XML中,我們可以在定義一個(gè)Bean時(shí)去指定這個(gè)Bean的自動(dòng)注入模式:
- byType
- byName
- constructor
- default
- no
比如:
<bean id="userService" class="com.luban.service.UserService" autowire="byType"/>
這么寫,表示Spring會(huì)自動(dòng)的給userService中所有的屬性自動(dòng)賦值(不需要這個(gè)屬性上有@Autowired注解,但需要這個(gè)屬性有對(duì)應(yīng)的set方法)。
在創(chuàng)建Bean的過(guò)程中,在填充屬性時(shí),Spring會(huì)去解析當(dāng)前類,把當(dāng)前類的所有方法都解析出來(lái),Spring會(huì)去解析每個(gè)方法得到對(duì)應(yīng)的PropertyDescriptor對(duì)象,PropertyDescriptor中有幾個(gè)屬性:
- name:這個(gè)name并不是方法的名字,而是拿方法名字進(jìn)過(guò)處理后的名字(如果方法名字以“get”開(kāi)頭,比如“getXXX”,那么name=XXX;如果方法名字以“is”開(kāi)頭,比如“isXXX”,那么name=XXX;如果方法名字以“set”開(kāi)頭,比如“setXXX”,那么name=XXX)
- readMethodRef:表示get方法的Method對(duì)象的引用
- readMethodName:表示get方法的名字
- writeMethodRef:表示set方法的Method對(duì)象的引用
- writeMethodName:表示set方法的名字
- propertyTypeRef:如果有g(shù)et方法那么對(duì)應(yīng)的就是返回值的類型,如果是set方法那么對(duì)應(yīng)的就是set方法中唯一參數(shù)的類型
get方法的定義是: 方法參數(shù)個(gè)數(shù)為0個(gè),并且 (方法名字以"get"開(kāi)頭 或者 方法名字以"is"開(kāi)頭并且方法的返回類型為boolean)
set方法的定義是:方法參數(shù)個(gè)數(shù)為1個(gè),并且 (方法名字以"set"開(kāi)頭并且方法返回類型為void)
所以,Spring在通過(guò)byName的自動(dòng)填充屬性時(shí)流程是:
- 找到所有set方法所對(duì)應(yīng)的XXX部分的名字
- 根據(jù)XXX部分的名字去獲取bean
S