專題一
·接口及面向接口的編程
接口
·用於溝通的中介物的抽象化
·實體把自己提供給外界的一種抽象化說明,用以由內部操作分離出外部溝通方法,使 其能被修改內部而不影響外界其他實體與其交互的方式
·對應java接口即聲明,聲明瞭那些方法是公開的
·java8中接口可以有方法體
面向接口編程
·結構設計中,分清層次及調用關係,每層只向外(上層)提供一組功能結構,各層間 僅依賴接口而非實現類
·接口實現的變動不影響各層間的調用,這一點在公共服務中尤爲重要
·面向接口編程中的接口是用於隱藏具體實現和實現多性的組件
·例子
·什麼是IOC
·IOC:控制反轉 控制權的轉移,應用程序本身不負責依賴對象的創建和維護,而是 由外部容器負責創建和維護
·DI(依賴注入)是一種實現方式。所謂依賴注入,就是由IOC容器在運行期間,動態 的將某種依賴關係注入到對象之中
·目的:創建對象並且組裝對象之間的關係
IOC房屋中介
·找中介——————————找IOC容器
·中介介紹房子————————容器創建並返回對象
·租房、入住——————————使用對象
·Spring的Bean配置
在IOC容器中,他把所有的對象都稱之爲Bean,Spring 的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 setInjectionDAO(InjectionDAO injectionDAO){
this.injectionDAO = injectionDAO;
}
}
Inteface InjectionDAO { void save2(String s);}
class InjectionDAOImpl implements InjectionDAOImpl{
publi void save2(String s){
Syso(“DAO保存參數:”+s)
}
}
spring-injection.xml文件配置如上設值注入。注意第一個Bean中的property name是InjectionServiceImpl類中的屬性injectionDAO,ref是第二個Bean中的id
junit類:
@RunWith(BlockJUnit4ClassRunner.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同時修改爲構造器參數即可