日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

2014-03-09 Spring的学习(1)------Spring管理Bean(实例化Bean)

發布時間:2024/9/20 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2014-03-09 Spring的学习(1)------Spring管理Bean(实例化Bean) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

1.搭建與測試Spring的開發環境

?

? ? ? PS: Spring-beans-2.5.xsd ?(為使在Beans.xml操作順暢) Perferences--->MyEclipse--->Files and Editors---->XML--->XML Catalog--->add User Specified Entries

? ? ?

2.Spring管理Bean小試牛刀

? ? 代碼實現:

PersonServiceImpl.java

/**實現類**/ package?cn.itcast.service.impl;import?cn.itcast.dao.PersonDao; import?cn.itcast.service.PersonService;public?class?PersonServiceImpl?implements?PersonService?{public?void?add(){System.out.println("This?is?a?add()");} }

? ?

Beans.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/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><!--?構造器實例對象?!--><bean?id="personService"?class="cn.itcast.service.impl.PersonServiceImpl"?scope="prototype"/> </beans>

SpringTest.java測試類(用JUNIT框架測試)

package?cn.itcast.test;import?org.junit.Test; import?org.springframework.context.support.ClassPathXmlApplicationContext;import?cn.itcast.dao.PersonDao; import?cn.itcast.mycontext.MyClassPathXmlApplicationContext; import?cn.itcast.service.PersonService;public?class?SpringTest?{@Testpublic?void?instaceBean()?{ClassPathXmlApplicationContext?context?=?new?ClassPathXmlApplicationContext("beans.xml");PersonService?serviceBean?=?(PersonService)context.getBean("personService");serviceBean.add();} } //output: This?is?a?add() //~

?PS:可以通過Spring Framework 開發參考手冊或者自帶API學習.

3.手動編碼完成部分實例化Bean的工作

?

BeanDefinition.java?配置Beans.xml文件中相對應的元素

package?cn.itcast.mycontext; public?class?BeanDefinition?{private?String?id;private?String?className;public?BeanDefinition(String?id,?String?clazz)?{this.id=id;this.className?=?clazz;}public?String?getId()?{return?id;}public?void?setId(String?id)?{this.id?=?id;}public?String?getClassName()?{return?className;}public?void?setClassName(String?className)?{this.className?=?className;} }

MyClassPathXmlApplicationContext.java?讀取Beans.xml

package?cn.itcast.mycontext;import?java.lang.reflect.Method; import?java.net.URL; import?java.util.ArrayList; import?java.util.HashMap; import?java.util.List; import?java.util.Map;import?org.dom4j.Document; import?org.dom4j.Element; import?org.dom4j.XPath; import?org.dom4j.io.SAXReader;public?class?MyClassPathXmlApplicationContext?{private?List<BeanDefinition>?BeanDefinitions?=?new?ArrayList<BeanDefinition>();/**Key:id???Value:instaceBean?**/private?Map<String,Object>?sigletons?=?new?HashMap<String,Object>();public?MyClassPathXmlApplicationContext(String?filename){this.readXml(filename);this.instaceBeans();}/***?實例化Bean*/private?void?instaceBeans()?{for(BeanDefinition?beanDefinition:BeanDefinitions){if(beanDefinition.getClassName()!=null?&&?beanDefinition.getClassName().trim()!=""){try?{sigletons.put(beanDefinition.getId(),?Class.forName(beanDefinition.getClassName()).newInstance());}?catch?(InstantiationException?|?IllegalAccessException|?ClassNotFoundException?e)?{e.printStackTrace();}}}}/***?讀取配置Bean的XML文件*?dom4j-1.6.1.jar,jaxen-1.1-beta-6.jar*?@param?filename*/private?void?readXml(String?filename)?{SAXReader?reader?=?new?SAXReader();Document?document?=?null;try{URL?url?=?this.getClass().getClassLoader().getResource(filename);document?=?reader.read(url);Map<String,String>?nsMap?=?new?HashMap<String,String>();nsMap.put("ns","http://www.springframework.org/schema/beans");XPath?xsub?=??document.createXPath("//ns:beans/ns:bean");xsub.setNamespaceURIs(nsMap);@SuppressWarnings("unchecked")List<Element>?elements?=?xsub.selectNodes(document);/**dom4j相關知識**/for(Element?element?:?elements){String?id?=?element.attributeValue("id");??//獲取id元素對應值String?clazz?=?element.attributeValue("class");?//獲取class元素對應值BeanDefinition?beanDfine?=?new?BeanDefinition(id,clazz);BeanDefinitions.add(beanDfine);}}catch?(Exception?e)?{e.printStackTrace();}}/***?獲取Bean實例*?@param?beanName*?@return*/public?Object?getBean(String?beanName){return?this.sigletons.get(beanName);} }

4.Spring的三種實例化Bean的方式

? ??

?4.1.?用構造器來實例化

當采用構造器來創建bean實例時,Spring對class并沒有特殊的要求, 我們通常使用的class都適用。也就是說,被創建的類并不需要實現任何特定的 ?接口,或以特定的方式編碼,只要指定bean的class屬性即可。不過根據所采用 的IoC類型,class可能需要一個默認的空構造器。

此外,IoC容器不僅限于管理JavaBean,它可以管理任意 ?的類。不過大多數使用Spring的人喜歡使用實際的JavaBean(具有默認的(無參)構造器 ?及setter和getter方法),但在容器中使用非bean形式(non-bean style)的類也是可 ?以的。比如遺留系統中的連接池,很顯然它與JavaBean規范不符,但Spring也能管理它。

當使用基于XML的元數據配置文件,可以這樣來指定bean類:

<!--?id值特殊字符集不能使用??!--> <bean?id="exampleBean"?class="examples.ExampleBean"/>? <bean?name="anotherExample"?class="examples.ExampleBeanTwo"/> <bean?id="personService"?class="cn.itcast.service.impl.PersonServiceImpl"?scope="prototype"/>

給構造函數指定參數以及為bean實例設置屬性將在隨后的 部分中談及。

4.2.?使用靜態工廠方法實例化

當采用靜態工廠方法創建bean時,除了需要指定class 屬性外,還需要通過factory-method屬性來指定創建bean實例 ?的工廠方法。Spring將調用此方法(其可選參數接下來介紹)返回實例對象,就此而言, 跟通過普通構造器創建類實例沒什么兩樣。

下面的bean定義展示了如何通過工廠方法來創建bean實例。注意,此定義并 未指定返回對象的類型,僅指定該類包含的工廠方法。在此例中, createInstance()必須是一個static方法。

<bean?id="exampleBean"?class="examples.ExampleBean2"??factory-method="createInstance"/><bean?id="personServiceFactory"?class="cn.itcast.service.impl.PersonServiceImplFactory"factory-method="getPersonServiceImpl"/>

給工廠方法指定參數以及為bean實例設置屬性將在隨后的部份中談及。

4.3. 使用實例工廠方法實例化

與 ?使用靜態工廠方法實例化類似,用來進行實例化的非靜態實例工廠方法位 于另外一個bean中,容器將調用該bean的工廠方法來創建一個新的bean實例。為使 ?用此機制,class屬性必須為空,而factory-bean ?屬性必須指定為當前(或其祖先)容器中包含工廠方法的bean的名稱,而該 工廠bean的工廠方法本身必須通過factory-method屬性來設定。

<!--?the?factory?bean,?which?contains?a?method?called?createInstance()?--> <bean?id="serviceLocator"?class="com.foo.DefaultServiceLocator">??? <!--?inject?any?dependencies?required?by?this?locator?bean?-->? </bean>? <!--?the?bean?to?be?created?via?the?factory?bean?-->? <bean?id="exampleBean"??factory-bean="serviceLocator"???factory-method="createInstance"/><!--?MyDemo?--><bean?id="personServiceFactory2"?class="cn.itcast.service.impl.PersonServiceImplFactory"/><bean?id="personServiceFactory3"?factory-bean="personServiceFactory2"factory-method="getPersonServiceImpl2"/>

雖然設置bean屬性 ?的機制仍然在這里被提及,但隱式的做法是由工廠bean自己來管理以及通過依 賴注入(DI)來進行配置。

5.Bean的作用域以及Bean更多知識

? ?參考:Spring framework 2.5文檔第三章Ioc(控制反轉)容器


轉載于:https://my.oschina.net/codeWatching/blog/206618

總結

以上是生活随笔為你收集整理的2014-03-09 Spring的学习(1)------Spring管理Bean(实例化Bean)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。