此文已由做者堯飄海受權網易雲社區發佈。
html
歡迎訪問網易雲社區,瞭解更多網易技術產品運營經驗。web
隨着Spring的不斷髮展與完善,早期它的功能可能只看作是IOC(反轉控制)的容器,或者其最大的亮點爲DI(依賴注入),可是如今隨着Spring 2.5.6 的Release發佈及3.0 版的推出及其餘Spring工程的發佈,如(Spring Batch,web Flow),其功能愈來愈多。正則表達式
經過上下文統一管理各類資源,經過相關設計模式完成屬性的注入或實現方法,其次新的版本經過聲明注入使得配置文件的大大簡化,加上對其餘的功能集成如Aop, Hibernate,Ibatis,JDBC,Toplink, Struts,Webwork,等等,使得和其餘框架整合方便,Spring 裏的設計方法也是之後須要學習的對象,總之經過此框架,使得開發人員把一些系統集成方面的工做簡化了。目前大部分用的仍是手工編寫配置,框架人員能夠經過編寫相關的模板自動實現Spring配置文件的生成。spring
XML文件裏通常配置主要分爲如下幾種:sql
1:屬性配置,如:apache
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>WEB-INF/classes/mail.properties</value> <value>WEB-INF/classes/jdbc.properties</value> </list> </property> </bean>
直接指出屬性文件地址,之後面的引用中就能夠直接${key},方便修改。設計模式
2:數據源配置,如:安全
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean>
配置數據的鏈接方式,也可直接配置成JNDI的方式。session
3:事務管理,如:app
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
對數據源進行事務管理。
4.持久層的配置,輕量級的有hibernate,ibatis等等,hibernate配置以下:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" > <property name="dataSource" ref="dataSource" /> <property name="mappingResources"> <list> <value>com/netease/demo/bean/Food.hbm.xml</value> <value>com/netease/demo/bean/User.hbm.xml</value> <value>com/netease/demo/bean/Order.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <property name="eventListeners"> <map> <entry key="merge"> <bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/> </entry> </map> </property> </bean>
5. AOP控制事務配置,即advisor和advice的設置,其中的切入點支持正則表達式的配置,設置以下:
<aop:config> <aop:advisor pointcut="execution(* com.netease.demo..dao.*(..))" advice-ref="txAdvice" order="0" /> </aop:config> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="remove*"/> <tx:method name="store*"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice>
6. 接下來的應該是系統的配置,如DAO,SERVICE等相關的配置,通常能夠單獨文件導入便可,此處只是一個簡單的示例,我把兩者合在一個文件,如:
<bean id="userService" class="com.netease.demo.service.impl.UserServiceImpl" autowire="byName" />
經過相關代碼,工程運行和工具對配置文件進行單元測試,如:JUNIT等,在此推薦unitils,只要簡單的在類上面加入聲明便可實現, 如:
@SpringApplicationContext({"applicationContext.xml", " applicationContext-dao.xml"})
另外還可直接聲明spring配置的DAO或service,它會直接注入聲明的實現,如:
@SpringBean("foodDao")
private FoodDao foodDao;
經過使用Spring再集成其餘工具如JUNIT,TESTNG等,能夠很是方便,快速的對依賴資源的使用進行測試用例進行開發和運行,明顯的提升測試效率。
參考文獻:
http://www.unitils.org/cookbook.html
http://www.springframework.org
標籤:
更多網易技術、產品、運營經驗分享請點擊。
相關文章:
【推薦】 流式處理框架storm淺析(上篇)