1. 程式人生 > >spring學習筆記:ioc容器高階特性

spring學習筆記:ioc容器高階特性

Spring容器的高階特性涉及到屬性編輯使用外部屬性檔案國際化容器事件等等; 今天講解一下屬性編輯器,使用外部資源,國際化。


屬性編輯器  如果你沒有了解過屬性編輯器,建議你先google一下,我簡單的解釋一下什麼是屬性編輯器,看一個新寫的有代表性的bean

配置檔案:

配置中的value都是字串的形式出現的,但是我們的BasicProperties的屬性不都是字串,那麼把字串這種字面量轉換為bean的屬性對應的型別靠的就是屬性編輯器。比如上面 spring能夠自動把c://1.txt識別為File的,把http://www.google.com自動轉化為URL. Spring為基本資料型別包括包裝型別, 集合類( List,Set,Map,Collection ), 資源類( File, Class, Locale, Resource, InoutStream, URL )提供了預設的編輯器,如果我們想實現自己的屬性編輯器,比如能夠把05/08/2009自動識別為日期型別,我們需要做以下的工作:
1

寫一個Editor繼承自PropertyEditorSupport,

2 在IOC容器中註冊這個編輯器.說註冊有點玄乎,其實就是讓容器知道這個編輯器的存在, 也就是配置一下.

3 寫一個帶有日期類的class測試一下:

4 配置一個Foo Bean,

寫一個測試類看容器是否真的可以把05/05/2008轉換為Date:
打印出Jan 5, 2008 12:05:00 AM, 成功!


使用外部屬性檔案  為什麼要使用外部熟性檔案? 舉例子:我們經常把資料庫連結,使用者名稱,密碼單獨放在一個properties檔案中,但是我們希望在bean config檔案中可以使用它,那就以這個例子來做以下,我們的db.properties檔案如下:

該檔案放在classpath下面根目錄上.我們需要把這個屬性檔案也註冊到IOC容器:

配置一個DateSource,並且使用這個屬性檔案:

然後啟動容器,沒報錯,說明配置成功.這個dataSource在講spring jdbc的時候會用到.
國際化  國際化也就是我們的程式能支援多語言環境, 程式中的提示資訊是多語言的.假如我們有這樣的資原始檔:
msg._en_US.properties,內容如下:
greeting.morning=Good morning
greeting.afternoon=Good afternoon

還有一箇中文版本的:msg.properties
greeting.morning=早上好
greeting.afternoon=下午好

但是資原始檔只能包含ascii字元,幸好java提供了一個把unicode字元轉換為ascii的工具native2ascii,在jdk/bin下面.呼叫該命令把資原始檔轉化一下:
native2ascii c:/msg.properties c:/msg_zh_CN.properties. 把生成的檔案msg_zh_CN.properties拷貝到src根目錄.注意檔案的命名: 檔名_語言簡稱_國家簡稱.properties ;  生成的msg_zh_CN.properties如下:
greeting.morning=/u65E9/u4E0A/u597D
greeting.afternoon=/u4E0B/u5348/u597D

配置一個messageResource:

注意路徑,如果資原始檔放在某個包下面,則要帶上包名 pkgname/pkgname/msg;
測試程式:

訊息檔案中可以有佔位符,context.getMessage()的第二個引數是陣列, 可以放到佔位符上.比如訊息:
greeting.morning=good morning {0}, today is {1} ,則:
String msg = c.getMessage("greeting.morning",new Object[]{"John", new GregorianCalendar().getTime

()},Locale.US);

下一講將學習spring aop.

相關推薦

spring學習筆記ioc容器高階特性

Spring容器的高階特性涉及到屬性編輯器,使用外部屬性檔案,國際化,容器事件等等; 今天講解一下屬性編輯器,使用外部資源,國際化。 屬性編輯器  如果你沒有了解過屬性編輯器,建議你先google一下,我簡單的解釋一下什麼是屬性編輯器,看一個新寫的有代表性的bean:pack

spring技術內幕筆記IoC容器初始化過程(2)- BeanDefinition的載入

Spring版本:4.3.8.RELEASEBeanDefinition載入過程,相當於把定義的BeanDefinition在IoC容器中轉換成一個Spring內部表示的資料結構的過程。IoC容器對Bean的管理和依賴注入功能的實現,就是通過對其持有的BeanDefiniti

Spring技術內幕》學習筆記4——IoC容器解析Bean定義資源並註冊解析後的Bean

原文連結http://blog.csdn.net/chjttony/article/details/6261708 1.通過前兩篇部落格的分析,我們已經瞭解了Spring IoC容器定位和載入Bean定義資原始檔的基本過程,接下來我們要繼續分析Spring IoC容器將載

spring技術內幕筆記IoC容器的初始化過程(3)- BeanDefinition的註冊

Spring版本:4.3.8.RELEASE DefaultListableBeanFactory中,通過一個HashMap來持有和載入BeanDefinition,解析得到的BeanDefinition向IoC容器的beanDefinitionMap註冊過程 是在載入B

laravel 學習筆記IoC服務容器(依賴注入與控制反轉)

容器,字面上理解就是裝東西的東西。常見的變數、物件屬性等都可以算是容器。一個容器能夠裝什麼,全部取決於你對該容器的定義。當然,有這樣一種容器,它存放的不是文字、數值,而是物件、物件的描述(類、介面)或者是提供物件的回撥,通過這種容器,我們得以實現許多高階的功能

python2.7學習筆記(6) ——高階特性切片、迭代、列表生成式、生成器

切片 用於擷取list中的元素,比如L是一個list L[a : b] a 迭代 如果給定一個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們稱為迭代(Iteration)。 只要是可迭代物件,無論有無下

Spring技術內幕》學習筆記3——IoC容器載入Bean定義資原始檔

1.當Spring的IoC容器將Bean定義的資原始檔封裝為Spring的Resource之後,接下來要做的就是通過Spring的資源載入器(resourceLoader)讀入Bean定義資原始檔的過程。對於IoC容器來說,Bean定義的載入過程就是將Bean定義資原始檔

Spring學習總結IOC基礎

spring概述 spring可以做很多事情,它為企業級開發提供了豐富的功能。但是這些功能的底層都依賴於它的兩個核心特性,控制反轉(IOC)和麵向切面(AOP)、 本篇文章主要介紹IOC。 現在 springboot 和spring cloud十分火爆,還是有必要看看兩者之間的關係的 S

2.Spring學習筆記之 ————IoC(控制反轉)

控制反轉(IoC),是Spring裡一個專有的名詞,其意思就是說,物件的例項由Spring容器來進行建立而不是我們自己手動建立,當我們在Spring容器中設定好Bean屬性後,Spring容器就會自動建立其例項,我們只要去呼叫Spring的Bean就行。 接下來是例子:

Spring學習筆記一之容器

        老實說樓主也是從今天才開始學習Spring的底層知識,所以很多細節知識樓主也不懂,So從網上get了很多Spring相關的資料作為參考,以下內容是對學習的知識做一個簡單的彙總.   

Spring入門筆記ioc容器

                                                                              Spring框架入門筆記(一)                                            

python學習筆記(二)---高階特性

#!/usr/bin/env python3 # -*- coding: utf-8 -*- r''' 高階知識 lrn_higher_list: 切片、迭代、列表生成式、生成器、迭代器 lrn_higher_func: 函數語言程

Docker學習筆記Docker容器常用命令

       容器是映象的一個執行例項。兩者不同的是,映象是靜態的只讀檔案,而容器帶有執行時需要的可寫檔案層。 一、建立容器        1、新建容器   &nb

Spring學習IOC(控制反轉)和AOP(面向切面)的xml配置和註解方式

Spring框架的作用:為了簡化java開發 Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的

spring學習筆記spring mvc不得不說的幾處配置

通常情況下會有這麼幾個配置檔案:web.xml, applicationContext.xml, xxxx-servlet.xml, 在web.xml中通常會這麼配置DispatcherServlet:<servlet> <servlet-name>

Python學習筆記(四)——高階特性

1, 1, 2, 3, 5, 8, 13, 21, 34, ... 斐波拉契數列用列表生成式寫不出來,但是,用函式把它打印出來卻很容易: def fib(max): n, a, b = 0, 0, 1 while n < max: print(b)

python學習筆記之函式及其高階特性

一.定義函式 • def關鍵字,依次寫出函式名、括號、括號中的引數和冒號 : • 在縮排塊中編寫函式體,函式的返回值用 return 語句返回。      def 函式名():          函式體         return 返回值1,返回值2 二.呼叫函式 Py

C++ 學習筆記STL 容器一些底層機制

1、vector 容器 vector 的資料安排以及操作方式,與 array 非常相似。兩者的唯一區別在於空間的運用的靈活性。array 是靜態空間,一旦配置了就不能改變,vector 是動態陣列。在堆上分配空間。vector 是動態空間,隨著元素的加入,它的內部機制會自行

spring學習筆記2——IOC

一、IOC概述ioc:控制反轉。控制:當前物件對內部成員的控制權。反轉:這種控制權不由當前物件管理了,由其他(類,容器)來管理。ioc的好處:1、不用自己組裝,拿來就用2、享受單例好處,效率高,不佔空間3、統一配置,便與修改二、IOC原理ioc其實就是一個大工廠,用來管理所有

spring學習筆記配置檢視解析器ViewResolver

我們在controller裡面經常這樣return一個ModelAndView: return new ModelAndView('user', 'model', model); DispatcherServlet靠ViewResolver把user解析為/WEB-INF/j