學習Spring 開發指南------Spring初探
Ø 首先,我們的元件並不需要實現框架指定的介面,因此可以輕鬆的將元件從Spring中脫離,甚
至不需要任何修改(這在基於EJB框架實現的應用中是難以想象的)。
Ø 其次,元件間的依賴關係減少,極大改善了程式碼的可重用性。
applicationContext.xml :
testQuickStart.java:
package net.xiaxin.spring.qs;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class testQuickStart {
public void aa() {
ApplicationContext ctx=new
FileSystemXmlApplicationContext("applicationContext.xml");
Action action = (Action) ctx.getBean("TheAction");
System.out.println(action.execute("Rod Johnson"));
}
public static void main(String[]args)
{
testQuickStart a = new testQuickStart();
a.aa();
}
}
Action.java
package net.xiaxin.spring.qs;
public interface Action {
public String execute(String str);
}
UpperAction.java package net.xiaxin.spring.qs;
public class UpperAction implements Action {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String string) {
message = string;
}
public String execute(String str) {
return (getMessage() + str).toUpperCase();
}
}
執行測試程式碼,我們看到控制檯輸出:
HELLO ROD JOHNSON
Spring的依賴注入機制,可以在執行期為元件配置所需資源,而無需在編寫元件程式碼時就加以
指定,從而在相當程度上降低了元件之間的耦合。
上面的例子中,我們透過Spring,在執行期動態將字串 “HeLLo” 注入到Action實現類的
Message屬性中。
仔細觀察一下上面的程式碼,可以看到:
1. 我們的所有程式程式碼中(除測試程式碼之外),並沒有出現Spring中的任何元件。
2. UpperAction和LowerAction的Message屬性均由Spring透過讀取配置檔案(bean.xml)動態設定。
3. 客戶程式碼(這裡就是我們的測試程式碼)僅僅面向介面程式設計,而無需知道實現類的具體名稱。同時,
我們可以很簡單的透過修改配置檔案來切換具體的底層實現類。
傳統編碼過程中,引入一個介面,往往也意味著同時要引入一個Factory類,也許還有一個額外的配置文
件及其讀寫程式碼
傳統編碼:
首先,我們必須編寫一個配置檔案讀取類,以實現Message屬性的可配置化。
其次,得有一個Factory模式的實現,並結合配置檔案的讀寫完成Action的動態載入。
config.properties:
TheAction=net.xiaxin.spring.qs.UpperAction
TheAction_msg=HeLLo
ActionFactory:
package net.xiaxin.spring.qs;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Properties;
import org.apache.commons.beanutils.BeanUtils;
public class ActionFactory{
public static Action getAction(String actionName){
Properties pro = new Properties();
try {
pro.load(new FileInputStream("config.properties"));
String actionImplName =
(String)pro.get(actionName);
String actionMessage =
(String)pro.get(actionName+"_msg");
Object obj =
Class.forName(actionImplName).newInstance();
// BeanUtils是Apache Commons BeanUtils提供的輔助類
BeanUtils.setProperty(obj,"message",actionMessage);
return (Action)obj;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
}
testFactory:
package net.xiaxin.spring.qs;
public class testFactory {
public static void main(String[] args) {
Action action = ActionFactory.getAction("TheAction");
System.out.println(action.execute("Rod Johnson"));
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/219138/viewspace-914193/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 學習Spring 開發指南------基礎語義Spring
- Spring mvc學習指南SpringMVC
- Spring原始碼學習之路---IOC初探(二)Spring原始碼
- 「Spring認證」如何開始學習Spring?Spring
- Spring學習之05使用註解開發Spring
- Spring boot學習(一)開啟Spring boot之旅Spring Boot
- 初探Spring SecuritySpring
- Spring Boot 初探Spring Boot
- Java後臺開發學習(4)——Spring Data JpaJavaSpring
- Spring學習Spring
- Java開發學習(一)----初識Spring及其核心概念JavaSpring
- spring學習:spring原始碼_BeanDefinitionSpring原始碼Bean
- spring boot學習Spring Boot
- Spring Cloud學習SpringCloud
- Spring Boot 學習Spring Boot
- Spring學習03Spring
- Spring Security學習Spring
- Spring MVC學習SpringMVC
- Spring Boot學習3:web篇(中)-Spring boot Rest學習Spring BootWebREST
- Spring 學習筆記(2) Spring BeanSpring筆記Bean
- Spring 學習筆記(3)Spring MVCSpring筆記MVC
- Spring Boot學習6:Spring Boot JDBCSpring BootJDBC
- Spring Boot + Mybatis + Redis二級快取開發指南SpringbootMyBatisRedis快取
- 【spring原始碼學習】spring的IOC容器之BeanFactoryPostProcessor介面學習Spring原始碼Bean
- 【spring原始碼學習】Spring的IOC容器之BeanPostProcessor介面學習Spring原始碼Bean
- Spring Boot學習(一)——Spring Boot介紹Spring Boot
- Spring boot學習(三) Spring boot整合mybatisSpring BootMyBatis
- spring學習筆記Spring筆記
- spring入門學習Spring
- Spring 學習筆記Spring筆記
- Spring 學習小結Spring
- spring Ioc 的學習Spring
- java spring 框架學習JavaSpring框架
- spring學習(轉載)Spring
- Spring原始碼剖析2:初探Spring IOC核心流程Spring原始碼
- Spring原始碼剖析1:初探Spring IOC核心流程Spring原始碼
- Spring原始碼系列:初探底層,手寫SpringSpring原始碼
- Spring Boot學習4:web篇(下)-Spring boot (Servlet,Jsp)學習Spring BootWebServletJS