【244期門診集錦】入木三分、鞭辟入里掌握Spring
本期特邀知名作家、開源框架專家陳雄華老師,針對Spring學習過程中遇到的問題給予解答。歡迎網友積極提問,與專家一起討論!
查看本期門診精彩實錄:http://doctor.51cto.com/develop-258.html
精選本期網友提問與專家解答,以供網友學習參考。
Q:老師好:如何學習Spring?需要掌握哪些知識?Spring 3.0比2.0有哪些差異及改進?
A:
1)核心API更新到Java 5.0
2)新增Spring表達式語言
3)可通過Java類提供IoC配置信息
4)通用類型轉換系統(tǒng)和屬性格式化系統(tǒng)
5)數(shù)據(jù)訪問層新增OXM功能
6)Spring 3.0最令人振奮的一個增強是Spring MVC提供了對REST風格編程的支持
7)聲明式模型驗證,全面支持JSR-303的Bean驗證API
8)對JavaEE 6的支持
9)支持內嵌的數(shù)據(jù)庫
Q:老師您好,學習Spring需要掌握哪些Java基礎知識?如果深入了解并掌握Spring?
A:大致需要以下的知識:
1)Java反射知識;
2)Java動態(tài)代理知識;
3) Java注解知識;
4) PropertyEditor的知識;
5) ThreadLocal的知識;
6) 國際化消息的知識;
這些Java基礎知識在《Spring 3.x企業(yè)應用開發(fā)實戰(zhàn)》中都有介紹,為讀者做好的Java基礎知識的鋪墊,減少了讀者閱讀的難度。
如果深入了解并掌握Spring?先嘗試在項目中使用Spring,然后再有機會了解Spring的技術內幕,技術內幕在書的第3,5章有講解,再此基礎上建議你開始讀讀Spring的源碼.讀了Spring源碼,一定會讓你的Java功力和OOA,OOP能力大增!
Q:老師好:您好,公司有個項目,其中一個LogicImpl里面執(zhí)行了除常用biz logic之外的,侏儒去外網抓取一些數(shù)據(jù),socket和其他系統(tǒng)之間的通信的功能(使用還比較頻繁)。有一次,系統(tǒng)突然D了,一看,JDBC pool全滿了。后來該類實現(xiàn)了spring的ApplicationContextAware接口,后面在用的時候就通過applicationcontex上下文的getBean去取本類的實例。這樣就解決了。想必這個接口您應該也熟悉吧。區(qū)別在于改動后,吧一些操作交給了spring的來管理,限于原因,沒仔細去追究,spring源碼也一直沒時間去細看。不知道您是否遇到過,能否詳細的說明一下這個事情的原因?如果沒遇到過,您也可以對這個接口說一下您自己的看法,謝謝。
A:感謝您的提問。
我的猜測是,你的這個業(yè)務類方法由于執(zhí)行時間較長,他持有Connection的時間就長,所以并發(fā)性就差。 因此需要把數(shù)據(jù)庫訪問的邏輯放在一個事務方法中,數(shù)據(jù)訪問完成后,就馬上將連接釋放給連接池。引入ApplicationContextAware后,通過getBean的方法和直接Autowried 是沒有區(qū)別的,因此你的問題,我覺得還是沒有徹底解決。我不知道,你原來這個LogicImpl是不是單實例的, 在Spring中管理的Bean都是單實例的,它可以有效提高并發(fā)性。建議你將對外網操作這些邏輯和數(shù)據(jù)庫訪問邏輯分開來,對外網的操作較重,可以放到一個異步操作中去做,不要和數(shù)據(jù)庫訪問放在一起,這樣可以降低對數(shù)據(jù)庫連接占用的時間,提高并發(fā)性。
Q:專家們好,你好!在用SPRING管理數(shù)據(jù)庫數(shù)據(jù)源時一般都會顯示用戶名和密碼等敏感信息,用sping來加載數(shù)據(jù)源,如何保障安全性的問題?
A:這個問題很好,說明你對Spring的應用已經比較深了。可以覆蓋PropertyPlaceholderConfigurer類的以下幾個方法:
1)void convertProperties(Properties props):屬性文件中的所有屬性值都封裝在props中,覆蓋此方法,可以對所有的屬性值進行轉換處理。
2)String convertProperty(String propertyName, String propertyValue):在加載屬性文件并讀取文件中的每個屬性時,都會調用此方法進行轉換處理。
3)String convertPropertyValue(String originalValue):和上一個方法類似,只不過沒有傳入屬性名。
Q:陳老師您好,我用SSH開發(fā)了兩個企業(yè)門戶系統(tǒng),開發(fā)起來很容易,可正式上線后,就感覺系統(tǒng)速度不夠流暢了,而且越運行就會越慢,人家服務商那邊說我們的系統(tǒng)老是把他們的服務器內存跑爆掉,真不知道是什么原因引起的,不知Spring有沒有什么好的解決方案?
A:非常感謝您的問題。
如果是互聯(lián)網的項目,不在建議使用Hibernate,因為Hibernate對緩存的管理層面比較高,不方便做經細化的緩存管理。我現(xiàn)在的項目也是互聯(lián)網項目,我是采用Spring MVC+Spring +myBatis+memcached+freemaker.Spring本身是不會耗資源的,阿里巴巴就是使用Spring的。