在java三層架構中,單例的service層為什麼不使用靜態static方式來實現?家和萬事興1401291142018-01-19 21:29:14

有一些成員變數有執行緒安全問題存在

在java三層架構中,單例的service層為什麼不使用靜態static方式來實現?IT人劉俊明2018-01-20 07:41:17

首先我們看一下java開發的層次結構有哪些,都分別是什麼內容。

java開發有兩個層次結構,一個是三層結構,一個是N層結構。我們先看三層結構:

Client Tier(客戶層)。這一層主要的工作有兩項,一個是為使用者提供輸入頁面,另一個是為使用者提供結果的輸出頁面。主要的工作在於設計和內容展示,如何讓使用者使用的更方便,效果看起來更好是主要目標。

Business Tier(業務處理層)。這一層的主要功能是處理使用者的請求並返回結果。這一層是設計和實現的核心層,所有的業務處理都集中在這一層,問題中提到的service就處在這一層。在服務端很多元件都為處理使用者的請求服務,有做導航的,有做邏輯運算的,有做資料庫處理的等等,所以service中包含的服務太多了,為什麼不能設計成static呢?設計成static無非就是幾個目的:讓物件常駐記憶體,提前載入,物件之間共享資料。而這些並不是每一個service元件都需要的,而且static會長時間佔用儲存空間,這會嚴重影響系統的處理能力。所以在service元件中的servlet官方描述中嚴禁使用static,因為本身servlet在執行時就具備了static的部分執行機制(透過容器的配置),如果再定義為static就沒有必要了。

EIS Tier(企業資訊系統層)。這一層的任務有一個就是資料儲存,通常這層有兩個解決方案:一個是資料庫,另一個是ERP(也可以叫遺留系統,為了保護投資,其實我覺得叫遺留系統更為合適,但是官方文件稱為ERP)。不管哪種方式作用是一樣的就是管理資料。

另外一個N層結構通常就是四層結構,在三層結構的基礎上,增加了一個Web Tier(web層),主要是做web互動的,通常和service層統稱為後臺。

希望我的回答能解答你的疑惑。

在java三層架構中,單例的service層為什麼不使用靜態static方式來實現?Jacarri_Chan2018-02-04 17:07:49

非static 便於管理。

J2EE常用的技術是ioc和aop。它們本質上都是用的反射或者動態代理這兩種技術。而這兩種技術操作物件都是非static 例項。

舉個例子:你模仿依賴注入給一個例項的屬性set值,發現set方法不能是static 。

在java三層架構中,單例的service層為什麼不使用靜態static方式來實現?自以為神人的鳥人2018-01-19 21:29:13

首先java中沒有三層架構這一概念,如果service是靜態的,dao層也得是靜態的,很多框架都得是靜態,那就不符合面向物件程式設計思想,大家都知道靜態的東西在繼承和重寫這方面是沒有super這個說法的。