一款快樂的博客項目Solo的基礎框架Latke簡單介紹

Latke在設計上原理相似與Spring,能夠理解爲是Spring的極簡版。html

本文章是對 https://hacpai.com/article/1466870492857 的補充前端

概述java

Latke是一個簡單易用的Java Web應用開發框架,包含IOC容器、事件通知、持久化、插件等組件,也包含一些應用開發時須要的基本服務(例如緩存、定時任務、郵件、HTTP客戶端等)程序員

 

整個框架採起MVC架構思想,經常使用的幾個註解是數據庫

@RequestProcessor     //請求處理      控制器後端

@Inject        //服務調用      緩存

@Service        //服務實現      服務架構

@Repository        //持久層註解    DAO層框架

 

引擎工具

所使用的引擎爲FreeMarker

主要使用的元素有:

${...}  這個表達式被稱爲interpolation(插值)。正如其名字所說,FreeMarker將其數據模型上的值取出替換表達式。

註釋  <#-- something -->

FTL標籤(FreeMarker模版的語言標籤)  

<#if condition>
    ...
<#elseif condition2>
    ...
<#elseif condition3>
    ...
<#else>
    ...
</#if>

 

引擎實例

如:

 1 <html>
 2     <head>
 3         <title>Welcome!</title>
 4     </head>
 5     <body>
 6         <h1>Welcome ${user}!</h1>
 7         <p>Our latest product:
 8         <a href="${latestProduct.url}">${latestProduct.name}</a>!
 9     </body>
10 </html>

在FreeMarker引擎上工做時,上面的${user} 就是取出數據模型中的數據,而整個HTML就是一個靜態的模版。用戶訪問時,引擎會根據用戶訪問的內容,更新數據。

如:

 1 <html>
 2     <head>
 3         <title>Welcome!</title>
 4     </head>
 5     <body>
 6         <h1>Welcome Abel Keith!</h1>
 7         <p>Our latest product:
 8         <a href="products/greenmouse.html">green mouse</a>!
 9     </body>
10 </html>

數據模型

這裏的數據模型是樹形結構,圖形化能夠是這樣。這只是個形象化的解釋,數據模型不是文本格式,它來自於Java對象:

(root)
  |
  +- user = "Big Joe"
  |
  +- latestProduct
      |
      +- url = "products/greenmouse.html"
      |
      +- name = "green mouse"

用一句話歸納咱們將會使用的這個引擎:模版 + 數據模型 = 輸出

其它關於引擎就不詳述,若有興趣,就去搜索相關文件

 

IOC 容器

實現 JSR-330 規範 又稱 Java 依賴注入標準(JSR-330, Dependency Injection for Java)

詳情連接:https://blog.csdn.net/dl88250/article/details/4838803

這裏使用的javax.inject的注入爲依賴注入

不使用依賴注入,使用構造方法獲取對象的方法:

1   class Stopwatch { 
2           final TimeSource timeSource; 
3           Stopwatch () { 
4               timeSource = new AtomicClock(...); 
5           } 
6           void start() { ... } 
7           long stop() { ... } 
8   }

 經過工廠或者定位器實現

1     class Stopwatch { 
2           final TimeSource timeSource; 
3           Stopwatch () { 
4               timeSource = DefaultTimeSource.getInstance(); 
5           } 
6           void start() { ... } 
7           long stop() { ... } 
8     }

添加清理方式的對象建立

 1   void testStopwatch() { 
 2           TimeSource original = DefaultTimeSource.getInstance(); 
 3           DefaultTimeSource.setInstance(new MockTimeSource()); 
 4           try { 
 5               // Now, we can actually test Stopwatch. 
 6               Stopwatch sw = new Stopwatch(); 
 7               ... 
 8           } finally { 
 9               DefaultTimeSource.setInstance(original); 
10           } 
11   }

以上這些代碼在應用過程當中可能會引發各類沒必要要的複雜度,以及各類潛在的問題。

依賴注入則能夠解決這些問題,提供了很高的彈性。它替程序員調用構造器或者工廠,一個稱做依賴注入器的工具將把依賴傳遞給對象:

1       class Stopwatch { 
2           final TimeSource timeSource; 
3           @Inject Stopwatch(TimeSource timeSource) { 
4               this.TimeSource = timeSource; 
5           } 
6           void start() { ... } 
7           long stop() { ... } 
8       }

注入器會進一步地傳遞依賴給其餘的依賴,直到它構造出整個對象圖。當一個程序員建立一個StopwatchWidget實例:

1  /** GUI for a Stopwatch */ 
2  class StopwatchWidget { 
3      @Inject StopwatchWidget(Stopwatch sw) { ... } 
4      ... 
5  }

注入器可能會作這些工做:

1. 查找一個 TimeSource 實例

2. 使用找到的 TimeSource 實例構造一個 Stopwatch

3. 使用構造的 Stopwatch 實例構造一個 StopwatchWidget

這時候咱們簡單瞭解了,@Inject 可能會作那些事了,以及它在 Latke框架中IOC的做用

事件通知

經過事件管理器接口可進行時間監聽器註冊、事件發佈、實現發佈/訂閱模式

ORM

主要提供了對JSON對象的增刪改查功能,能夠支持關係型數據庫(MySQL、H二、SQLServer) 以及 Redis 的數據存取。

插件

插件包含完整的前端與後端功能,能夠在不修改已有代碼的前提下擴展應用功能,並支持運行時的拔插。

國際化

在模版中能夠直接使用 ${xxxx} 的形式讀取語言配置,後端提供了語言服務來獲取不一樣 Locale 的語言配置

服務

框架內置應用開發時須要的一些基本的經常使用服務:

  • 緩存(CacheFactory,Cache)
  • 圖片處理(ImageServiceFactory,ImageService)
  • 郵件(MailServiceFactory,MailService)
  • HTTP 客戶端(URLFetchServiceFactory,URLFetchService)
  • 用戶管理(UserServiceFactory,UserService)
  • 日誌(Logger)
  • 任務隊列(TaskQueueServiceFactory,TaskQueueService)
  • 多語言(LangPropsService)

小結

大致上須要補充的一些個性化內容就這些了。

相關文章
相關標籤/搜索