spring入門篇(一)

專題一

·接口及面向接口的編程

接口

·用於溝通的中介物的抽象化

·實體把自己提供給外界的一種抽象化說明,用以由內部操作分離出外部溝通方法,使 其能被修改內部而不影響外界其他實體與其交互的方式

·對應java接口即聲明,聲明瞭那些方法是公開的

·java8中接口可以有方法體

面向接口編程

·結構設計中,分清層次及調用關係,每層只向外(上層)提供一組功能結構,各層間 僅依賴接口而非實現類

·接口實現的變動不影響各層間的調用,這一點在公共服務中尤爲重要

·面向接口編程中的接口是用於隱藏具體實現和實現多性的組件

·例子

 

·什麼是IOC

·IOC:控制反轉  控制權的轉移,應用程序本身不負責依賴對象的創建和維護,而是 由外部容器負責創建和維護

·DI(依賴注入)是一種實現方式。所謂依賴注入,就是由IOC容器在運行期間,動態 的將某種依賴關係注入到對象之中

·目的:創建對象並且組裝對象之間的關係

 

IOC房屋中介

·找中介——————————找IOC容器

·中介介紹房子————————容器創建並返回對象

·租房、入住——————————使用對象

 

 

·SpringBean配置

IOC容器中,他把所有的對象都稱之爲BeanSpring Bean配置:

 


Interface OneInterface { void hello();}

Class OneInterfaceImpl{ public void hello(String s){syso(s}}

 

可以發現:不必自己創建對象了,IOC機制就提供了,面向接口編程了,IOC隱藏實現了,不管對象了(IOC管了)

·Bean的初始化

 

 

 

 

 

 

 

·Spring的常用注入方式

·Spring注入是指在啓動Spring容器加載bean配置的時候,完成對變量的賦值行爲。(若類A中有一個B類型的實例變量,則在加載Bean A在對變量b賦值時也會加載Bean B

·常用的兩種注入方式:設值注入、構造注入

 

InjectionServiceImpl會自動調用本類中的setInjectionDAO方法對其類中的屬性injectionDAO賦值,ref指得是第二個<bean>中的id,這樣將兩個<bean>聯繫起來

 

 

service是指處理業務邏輯的部分,而DAO是對數據庫進行操作的部分,兩者分工明確

 

代碼示例:

Service:

Interface InjectionService { void save1(String s);}

 

class InjectionServiceImpl implements InjectionService{

private InjectionDAO injectionDAO;

 

public void save1(String s){

Syso(“Serivce接收參數:”+s);

s = s+”:”+this.hashCode();

injectionDAO.save2(s)

}

 

public void setInjectionDAOInjectionDAO injectionDAO{

this.injectionDAO = injectionDAO

}

}

 

Inteface InjectionDAO { void save2String s);}

 

class InjectionDAOImpl implements InjectionDAOImpl{

publi void save2String s{

Syso(“DAO保存參數:”+s)

}

}

spring-injection.xml文件配置如上設值注入。注意第一個Bean中的property nameInjectionServiceImpl類中的屬性injectionDAOref是第二個Bean中的id

 

junit類:

@RunWithBlockJUnit4ClassRunner.class

class InjectionTest extends UnitTestBase{

 

public InjectionTest(){

super(classpath:spring-injection.xml);

}

 

@Test

public void testSetter(){

InjectionService service = super.getBean(injectionService);//調用該類的set方法,對xml中配置的對應的property賦值

service.save(“這是要保存的數據”);

}

}

 

然後運行junit測試方法,輸出如下:(注意整個過程並沒有調用service實現類中的set方法對類中的DAO類實例賦值

Service接收參數:這是要保存的數據

DAO保存參數:這是要保存的數據:某哈希碼

 

 

 

構造注入(除了<constructor-arg 其他與前者相同)

 

 

調用InjectionServiceImpl中的一個構造器,該構造器有一個參數injectionDAO,並對該類中的injectionDAO屬性進行賦值。要注意第二行中name必須與service實現類中的屬性名相同。

 

代碼示例:將上面的代碼示例中的set賦值方法改爲構造器賦值,xml同時修改爲構造器參數即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章