spring mvc:日志對象logger的復用


在采用Spring mvc+org.slf4j.Logger開發項目時,發現幾乎每個controller或者manager都有的一個標配:

private final static Logger LOGGER = LoggerFactory.getLogger(Test.class);

看起來並沒有什么問題,但是毫無疑問的是,每新建一個controller或者manager就需要寫一次幾乎相同的代碼會間接降低效率,另外因為每個controller或者manager都有一個這樣的日志對象,無疑會增加內存的消耗,那么有沒有什么辦法平衡性能與效率的方式呢?

如果稍微深入過java基礎的話,會知道java的特性之一:多態。簡而言之,就是它允許基類的指針或引用指向派生類的對象,而在具體訪問時實現方法的動態綁定

下面直接附上結果:

1  @Controller
2  public class BaseController {
3   public final Logger logger = LoggerFactory.getLogger(this.getClass());
4  }
1  @Controller
2  @RequestMapping("/test")
3  public class TestController extends BaseController {
4     @RequestMapping("/")
5    public void test(){
6     logger.error("日志對象logger復用測試");
7    }
8 }

簡單解釋下,先建一個基礎控制層BaseController,然后新建一個業務Controller,並且繼承於BaseController,在這個業務控制層中的一個requestmapping中使用BaseController中的logger日志對象來簡單打印測試語句。

運行后,我們會發現日志打印出來的對象指向的是TestController而不是BaseController,即BaseController中的this.getClass()的this指向的是子類TestController。

這樣,只要在BaseController中定義一次日志對象,后續業務控制層就不需要每次都定義日志對象,這就是利用多態的效果。

當然,這樣做雖然會減少代碼量,但是也會有壞處,即:原來使用static定義日志對象,現在不使用,在調用方法層面上就由靜態調用變成來動態調用,調用速度上會有損失

如果發現這樣做會有什么特別的問題,還請各位指正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM