1. 參考資料
- Spring資料(江南白衣博物館)
-
Spring 2.5 參考手冊中文版(滿江紅出品)
-
《Spring Recipes - A Problem-Solution Approach》
Apress,2008 Spring 2中較好的參考書。
2. 選型
??? 有人說guice好,但我們用Spring不僅是為了IOC,也為了Spring對JEE所做的封裝,以及整個JavaEE界眾多項目(SpringSecurity,CXF、Struts2等)對它的依賴。???
3. in SpringSide 3 - Mini示例使用的基本特性
- 屬性配置及IOC容器
- @Transcational annotation標注的事務管理功能
- 集成測試的基類
3.1 IOC部分特征使用
?? 詳見Spring 筆記(江南白衣博物館)
? 3.1.1 零配置文件的使用場合
? ?? Service,Dao 層在無特殊配置項時,可使用IOC Annotation進行配置 實現約定俗成大于配置的零配置文件.
???? 而其他Database/SessionFactory ,SpringSecurity, CXF等需要進行參數配置時,仍然使用 XML 配置文件。
? 3.1.2? 零配置文件的annotation
???? SpringSide3中使用@Component注釋所有類別,在setter方法(不需要嚴格按setter命名)上 使用@Autowired 進行byType注入,如果需要byName注入則使用@Resource。
? 3.1.3 其他特征
?? 使用@Required注釋沒有用@Autowired注釋的屬性,保證對象必然被注入,如果對象沒有被注入則報錯。
?? 使用JSR250的@PostConstruct來定義在執行完所有setter注入后必須執行的函數。@PreDestroy來定義JDK關閉時通過shutdownhook調用的函數。
?? ApplcationContext中默認設置Lazyload 與Autowired by type 仍然是必然的選擇。
? 3.1.4 屬性文件管理
????? 在配置文件中,很有一些屬性會在團隊的開發環境,個人的開發環境,集成測試環境,以及生產環境集群的每臺服務器中都有所不同的。詳見Spring 筆記(江南白衣博物館)
?3.2 事務管理 ? ?
? ?? 在Service層用@Transactional 定義事務,詳見Spring 筆記(江南白衣博物館)。 注意Spring3.0 的@Transactional終于支持多個TransactionManager了, showcase里演示了多個數據源(不要求聯合事務JTA)導致多個TransactionManager的情況。此時@Transactional默認使用<tx>中指定的TransactionManager, 但也可以重新指定,如@Transactional("transactionManager"). 但這種HardCode的transactonMananger名稱還是越少越好了,如果第2個數據源其實是只讀的,那就不要給它配置事務。
? ?? 在AOP不到的地方,仍然有機會使用TransactionTemplate,(見Showcase的UserJdbcDao 與 LogJdbcWriter。)
3.3 集成測試的基類
? ?? 詳見 測試文檔
4. in SpringSide3
4.1 Showcase中使用的Spring功能索引
- JMX:JMX的Server端封裝
- JMS:JMS Template封裝
- Email:EMail客戶端封裝
- Schedule:Quartz的封裝,ScheduleExecutor的封裝
- Ehcache:Ehcache Server封裝
- Jdbc:Spring JdbcTemplate
4.2 SpringContextHolder
?? 在Spring ApplicationContext啟動時,先把Context放入個該類的靜態變量,當模塊的代碼無法通過正常渠道獲得Spring Context及其中的Bean時,可直接從該靜態變量中獲取。
4.3 AOP Aspect的寫法
?? 最新的寫法,一切都寫在java文件里,只要在applicationContext.xml里面定義一把scan就可以了。
?? <aop:aspectj-autoproxy proxy-target-class="true" />
?? 詳見showcase中的TraceLogAspect。