Cd Chen's Services

ba ba ba la~~

SCJP 課程

Java Scan Classes in Packages...

以前若要掃描隸屬於某些 Package 的 Classes,非常的麻煩。很多人都喜歡用 Spring 來解決這個問題,但可能還是要類似這樣做:

Java 鬆綁 (三):利用 ServiceLoader 實作動態載入

在前兩篇文章中,我們看到了如何利用 Java 多型的技巧,鬆綁類別之間的關係;也看到如何透過動態載入的技巧,來鬆綁 Package。不過還不是很完美,至少我是這樣認為。

在「Java 鬆綁 (二):利用 Package 與動態載入徹底鬆綁」這篇文章中,係利用 Class.forName() 這個古老的方法來實作動態載入的功能,個人覺得非常的麻煩且缺乏彈性。比較理想的作法,係利用 Java EE 或者 SpingFramework 提供的 CDI (Contexts & Dependency Injection) 來實作這樣的要求。

不過 Java EE 容器雖然是 Java 世界中的標準,但重量級的執行環境,對於一個小的專案來說,非常的不值得;而 SpingFramework 雖然夠輕量化 (但近期的發展也趨向於重量),但卻不是標準的作法,實作與部署時必須考慮執行的環境中是否提供所需的條件。

Java 鬆綁 (二):利用 Package 與動態載入徹底鬆綁

先前的例子裡,我們利用 Java 多型的技巧,來鬆綁類別之間的依賴關係。但在這個例子裡,變更實作類別時,還是需要重新編譯程式,還是不夠方便!!

有沒有更棒的方法呢??

有的。

Java 鬆綁 (一):利用多型鬆綁類別的依賴關係

在學習 OO 的過程中,很多前輩先進都會強調「鬆綁」的原則。所謂的鬆綁,就是把元件與元件之間依賴關係降到最低。鬆綁之後可以讓我們未來維護與擴充功能時,能夠更加的方便。為達成鬆綁原則,會充分利用 OOP 語言本身提供的機制來實作之,以 Java 為例,我們會利用多型來完成鬆綁的效果。

例如:我需要寫一個打招呼的程式,沒有考慮鬆綁原則時,可以這樣寫:

package org.cdchen.serviceloaders.apps;

public class SayHelloMain {
	public static void main(String[] args) {
		System.out.println("Hello to cdchen.");
	}
}

這樣的寫法非常的直接與單純,但卻產生了一個問題:如果以後要改用其他方式打招呼,就得重新修改程式,並且重新編譯才行。為此,我們可以考慮這樣做:

You are here