網(wǎng)站app開發(fā)建設(shè)關(guān)鍵詞在線查詢
目錄
基于XML配置Bean
?id分配規(guī)則
通過id獲取bean
通過類型獲取bean
通過C命名空間配置bean
使用C命名空間?
通過P命名空間配置bean
?通過util:list進(jìn)行配置bean
指定id,直接ref引用過來
通過外部屬性文件配置Bean
?Bean信息重用(繼承)
基于XML自動裝配
byName
byType
基于XML配置Bean
private ConcurrentHashMap<String,Object> singletonObejcts = new ConcurrentHashMap();
xml中存放bean的唯一id、全路徑以及屬性信息
反射創(chuàng)建對象,默認(rèn)會調(diào)用無參構(gòu)造方法
將id和對象放入單例池Map<String(id),Object(bean)>
解析xml配置文件就會創(chuàng)建xml里設(shè)置的所有對象
new ClassPathXmlApplicationContext("s1.xml",""s2.xml");可以寫多個xml文件,可變長
不一定是自定義的bean,可以是系統(tǒng)存在的類,如Date
<bean id="birthBean" class="java.util.Date"/>
BeanFactory是ioc容器的頂級接口,負(fù)責(zé)創(chuàng)建Bean對象,是一個工廠
也可以用BeanFactory代替ApplicationContext
?id分配規(guī)則
bean不帶id,系統(tǒng)會默認(rèn)分配id,分配id的規(guī)則是 全類名#0, 全類名#1?
通過id獲取bean
通過類型獲取bean
要求ioc容器中的同一個類的bean只能有一個
應(yīng)用場景:比如Servlet/Controller/Service 在一個線程中只需要一個對象實例(單例)的情況
通過C命名空間配置bean
不使用C命名空間
? ? 1. constructor-arg標(biāo)簽可以指定使用構(gòu)造器的參數(shù)
? ? 2. index表示構(gòu)造器的第幾個參數(shù) 從0開始計算的
? ? 3. 除了可以通過index 還可以通過 name / type 來指定參數(shù)方式
? ? 4. 類的構(gòu)造器,不能有完全相同類型和順序的構(gòu)造器,所以可以通過type來指定?
使用C命名空間?
構(gòu)造器注入的一種快捷實現(xiàn)方式
必須存在有參構(gòu)造器
可以不要get、set方法
通過P命名空間配置bean
set注入的一種快捷實現(xiàn)方式
必須存在set方法和無參構(gòu)造器
可以不要有參構(gòu)造器
?通過util:list進(jìn)行配置bean
必須存在set方法
指定id,直接ref引用過來
通過外部屬性文件配置Bean
必須存在set方法
在resoureces目錄下新建xx.properties
?
?Bean信息重用(繼承)
基于XML自動裝配
自動裝配:Spring會在上下文中自動查找,并自動給Bean裝配與其相關(guān)的屬性
在xml配置文件中的bean標(biāo)簽中加入一個屬性autowire:一般是byName或byType
byName
通過名字完成自動裝配(必須要有set方法)
1、找class對應(yīng)實體類
2、看屬性的setXxx方法中的Xxx,然后首字母小寫xxx
3、在配置文件中查找 id=xxx 的Bean
byType
Spring會自動尋找一個與該屬性類型相同的Bean,注入進(jìn)來,保證類型中是唯一的Bean