您好,登錄后才能下訂單哦!
1 BeanFactory與ApplicationContext區(qū)別
BeanFactory是Spring框架中IoC容器的頂層接?,它只是?來定義?些基礎功能,定義?些基礎規(guī)范,?ApplicationContext是它的?個?接?,所以ApplicationContext是具備BeanFactory提供的全部功能的。
通常,我們稱BeanFactory為SpringIOC的基礎容器,ApplicationContext是容器的?級接?,?BeanFactory要擁有更多的功能,?如說國際化?持和資源訪問(xml,java配置類)等等
啟動 IoC 容器的?式:
* Java環(huán)境下啟動IoC容器
①ClassPathXmlApplicationContext:從類的根路徑下加載配置?件(推薦使?)
②FileSystemXmlApplicationContext:從磁盤路徑上加載配置?件
③AnnotationConfigApplicationContext:純注解模式下啟動Spring容器
* Web環(huán)境下啟動IoC容器
①從xml啟動容器
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--配置Spring ioc容器的配置?件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--使?監(jiān)聽器啟動Spring的IOC容器-->
<listener>
<listener-
class>org.springframework.web.context.ContextLoaderListener</listener-
class>
</listener>
</web-app>
②從配置類啟動容器
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--告訴ContextloaderListener知道我們使?注解的?式啟動ioc容器-->
<context-param>
<param-name>contextClass</param-name>
<param-
value>org.springframework.web.context.support.AnnotationConfigWebAppli
cationContext</param-value>
</context-param>
<!--配置啟動類的全限定類名-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.lagou.edu.SpringConfig</param-value>
</context-param>
<!--使?監(jiān)聽器啟動Spring的IOC容器-->
<listener>
<listener-
class>org.springframework.web.context.ContextLoaderListener</listener-
class>
</listener>
</web-app>
2 純xml模式
xml ?件頭
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
實例化Bean的三種?式
?式?:使??參構造函數
在默認情況下,它會通過反射調??參構造函數來創(chuàng)建對象。如果類中沒有?參構造函數,將創(chuàng)建失敗。
?式?:使?靜態(tài)?法創(chuàng)建
在實際開發(fā)中,我們使?的對象有些時候并不是直接通過構造函數就可以創(chuàng)建出來的,它可能在創(chuàng)建的過程 中會做很多額外的操作。此時會提供?個創(chuàng)建對象的?法,恰好這個?法是static修飾的?法,即是此種情 況。
例如,我們在做Jdbc操作時,會?到java.sql.Connection接?的實現類,如果是mysql數據庫,那么?的就 是JDBC4Connection,但是我們不會去寫 JDBC4Connection connection = new JDBC4Connection() ,因 為我們要注冊驅動,還要提供URL和憑證信息,? DriverManager.getConnection ?法來獲取連接。
?式三:使?實例化?法創(chuàng)建
此種?式和上?靜態(tài)?法創(chuàng)建其實類似,區(qū)別是?于獲取對象的?法不再是static修飾的了,?是類中的? 個普通?法。此種?式?靜態(tài)?法創(chuàng)建的使??率要??些。
在早期開發(fā)的項?中,??類中的?法有可能是靜態(tài)的,也有可能是?靜態(tài)?法,當是?靜態(tài)?法時,即可 采?下?的配置?式:
<!--使?實例?法創(chuàng)建對象的配置?式-->
<bean id="beanFactory"
class="com.lagou.factory.instancemethod.BeanFactory"></bean>
<bean id="transferService" factory-bean="beanFactory" factory-
method="getTransferService"></bean>
3.Bean的X及?命周期
作?范圍的改變
在spring框架管理Bean對象的創(chuàng)建時,Bean對象默認都是單例的,但是它?持配置的?式改
變作?范圍。作?范圍官?提供的說明如下圖:
在上圖中提供的這些選項中,我們實際開發(fā)中?到最多的作?范圍就是singleton(單例模式)和prototype(原型模式,也叫多例模式)。配置?式參考下?的代碼:
<!--使?靜態(tài)?法創(chuàng)建對象的配置?式-->
<bean id="userService" class="com.lagou.factory.BeanFactory"
factory-method="getTransferService"></bean>
<!--使?實例?法創(chuàng)建對象的配置?式-->
<bean id="beanFactory"
class="com.lagou.factory.instancemethod.BeanFactory"></bean>
<bean id="transferService" factory-bean="beanFactory" factory-
method="getTransferService"></bean>
<!--配置service對象-->
<bean id="transferService"
class="com.lagou.service.impl.TransferServiceImpl" scope="singleton">
</bean>
不同作?范圍的?命周期
單例模式:singleton
對象出?:當創(chuàng)建容器時,對象就被創(chuàng)建了。
對象活著:只要容器在,對象?直活著。
對象死亡:當銷毀容器時,對象就被銷毀了。
?句話總結:單例模式的bean對象?命周期與容器相同。
多例模式:prototype
對象出?:當使?對象時,創(chuàng)建新的對象實例。
對象活著:只要對象在使?中,就?直活著。
對象死亡:當對象?時間不?時,被java的垃圾回收器回收了。
?句話總結:多例模式的bean對象,spring框架只負責創(chuàng)建,不負責銷毀。
Bean標簽屬性
在基于xml的IoC配置中,bean標簽是最基礎的標簽。它表示了IoC容器中的?個對象。換句話說,如果?個對象想讓spring管理,在XML的配置中都需要使?此標簽配置,Bean標簽的屬性如下:
id屬性: ?于給bean提供?個唯?標識。在?個標簽內部,標識必須唯?。
class屬性:?于指定創(chuàng)建Bean對象的全限定類名。
name屬性:?于給bean提供?個或多個名稱。多個名稱?空格分隔。
factory-bean屬性:?于指定創(chuàng)建當前bean對象的??bean的唯?標識。當指定了此屬性之后,class屬性失效。
factory-method屬性:?于指定創(chuàng)建當前bean對象的???法,如配合factory-bean屬性使?,則class屬性失效。如配合class屬性使?,則?法必須是static的。
scope屬性:?于指定bean對象的作?范圍。通常情況下就是singleton。當要?到多例模式時,可以配置為prototype。 init-method屬性:?于指定bean對象的初始化?法,此?法會在bean對象裝配后調?。必須是?個?參?法。
destory-method屬性:?于指定bean對象的銷毀?法,此?法會在bean對象銷毀前執(zhí)?。它只能為scope是singleton時起作?。
4.DI 依賴注?的xml配置
依賴注?分類
按照注?的?式分類
構造函數注?:顧名思義,就是利?帶參構造函數實現對類成員的數據賦值。
set?法注?:它是通過類成員的set?法實現數據的注?。(使?最多的)
依賴注?的配置實現之構造函數注? 顧名思義,就是利?構造函數實現對類成員的賦值。它的使?要求是,類中提供的構造函數參數個數必須和配置的參數個數?致,且數據類型匹配。同時需要注意的是,當沒有?參構造時,則必須提供構造函數參數的注?,否則Spring框架會報錯。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。