(二)個人整理Spring系列控制反轉(IoC)容器
一什麼是控制反轉模式? 不創建對象但是描述創建它們的方式在代碼中不直接與對象和服務連接但在配置文件中描述哪一個組件需要哪一項服務 容器 (在 Spring 框架中是 IOC 容器) 負責將這些聯系在一起
二Spring 中的 Bean? 由Spring IoC容器所管理的對象被稱之為beanbean就是由Spring容器初始化裝配及被管理的對象 bean定義以及bean相互間的依賴關系將通過配置元數據來描述 三什麼是Spring IoC容器? orgspringframeworkbeans包是Spring IoC容器的基礎 orgspringframeworkbeansfactoryBeanFactory接口是Spring IoC容器的實際代表者 IoC容器負責容納此前所描述的bean並對bean進行管理 BeanFactory 接口 BeanFactory是IoC容器的核心接口是工廠設計模式的實現bean 工廠的概念是 Spring 作為 IOC 容器的基礎 它的職責包括實例化檢索配置應用程序中的對象及管理對象之間的關系 BeanFactory 支持兩個對象模型 單態模型提供了具有特定名稱的對象的共享實例可以在查詢時對其進行檢索Singleton 是默認的也是最常用的對象模型對於無狀態服務對象很理想 原型模型確保每次檢索都會創建單獨的對象在每個用戶都需要自己的對象時原型模型最適合 ApplicationContext接口 orgntextApplicationContext由BeanFactory接口派生擴展而來因而提供了BeanFactory所有的功能 在構建JEE應用時使用ApplicationContext將是更好的選擇 context包還提供了以下的功能 MessageSource 提供國際化的消息訪問 資源訪問如URL和文件 事件傳播實現了ApplicationListener接口的bean 載入多個(有繼承關系)上下文
配置元數據 Spring IoC容器將讀取配置元數據並通過它對應用中各個對象進行實例化配置以及組裝 基於XML的元數據是最常用到的配置元數據格式然而它並不是唯一的描述格式Spring IoC容器在這一點上是完全開放的 當使用基於XML的配置元數據時將在頂層的<beans/>元素中配置一個或多個<bean/>元素 bean定義與應用程序中實際使用的對象一一對應通常情況下bean的定義包括 服務層對象數據訪問層對象(DAO)類似Struts Action的表示層對象Hibernate SessionFactory對象JMS Queue對象等等
四實例化IoC容器(基於XML的元數據) 通過ClassPathXmlApplicationContext類加載一個或多個XML文檔來實例化BeanFactory接口的實現擴展ApplicationContext類 要從 BeanFactory 檢索 bean只需調用 getBean() 方法傳入將要檢索的 bean 的名稱即可
五一個簡單Spring 示例
建立Java項目MySpring
導入Spring框架
創建JavaBeanHelloBean編寫testHello方法
HelloBeanjava
view plaincopy to clipboardprint?
<FONT size=> package comqubean;
public class HelloBean {
public String sayHello(String name){
return Stringformat(%$s : Hello World! name);
}
}</FONT>
package comqubean;
public class HelloBean {
public String sayHello(String name){
return Stringformat(%$s : Hello World! name);
}
} 配置applicationContextxml 將HelloBean注入Spring容器
applicationContextxml
view plaincopy to clipboardprint?
<FONT size=> <?xml version= encoding=UTF?>
<beans
xmlns=
xmlns:xsi=instance
xsi:schemaLocation= beansxsd>
<!方法
<import resource=OtherXML/helloBeanxml/>
>
<!方法>
<bean class=comqubeanHelloBean id=helloBean>
</bean>
</beans></FONT>
<?xml version= encoding=UTF?>
<beans
xmlns=
xmlns:xsi=instance
xsi:schemaLocation= beansxsd>
<!方法
<import resource=OtherXML/helloBeanxml/>
>
<!方法>
<bean class=comqubeanHelloBean id=helloBean>
</bean>
</beans>view plaincopy to clipboardprint?
<FONT size=><STRONG><U>helloBeanxml</U></STRONG></FONT>
helloBeanxmlview plaincopy to clipboardprint?
<?xml version= encoding=UTF?>
<beans
xmlns=
xmlns:xsi=instance
xsi:schemaLocation= beansxsd>
<bean class=comqubeanHelloBean id=helloBean>
</bean>
</beans>
<?xml version= encoding=UTF?>
<beans
xmlns=
xmlns:xsi=instance
xsi:schemaLocation= beansxsd>
<bean class=comqubeanHelloBean id=helloBean>
</bean>
</beans>view plaincopy to clipboardprint?
<FONT size=></FONT>
導入Junit 測試
編寫測試類TestHello 重寫setUp方法實例化容器編寫testHello方法測試HelloBean的hello方法
view plaincopy to clipboardprint?
<FONT size=> TestHellojava</FONT>
TestHellojavaview plaincopy to clipboardprint?
<FONT size=>
package comqutest;
import orgntextApplicationContext;
import orgntextsupportClassPathXmlApplicationContext;
import comqubeanHelloBean;
import junitframeworkTestCase;
public class TestHello extends TestCase {
private ApplicationContext ctx;
private HelloBean hello;
protected void setUp() throws Exception {
supersetUp();
thisctx = new ClassPathXmlApplicationContext(
new String[] {ApplicationContextxmlOtherXML/helloBeanxml});
thishello = (HelloBean) thisctxgetBean(helloBean);
}
public void testSayHello(){
assertEquals(Java : Hello World! thishellosayHello(Java));
}
}
</FONT>
From:http://tw.wingwit.com/Article/program/Java/ky/201311/27933.html