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定义日志对象,现在不使用,在调用方法层面上就由静态调用变成来动态调用,调用速度上会有损失。

如果发现这样做会有什么特别的问题,还请各位指正!

时间: 2024-10-09 20:22:44

spring mvc:日志对象logger的复用的相关文章

spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式

spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式 在类名,接口头上注解使用在 @JsonIgnoreProperties(value={"comid"}) //希望动态过滤掉的属性 例 @JsonIgnoreProperties(value={"comid"}) public interface 接口名称{ } @JsonIgnoreProperties(value={"comid"}) public class 类名{

Spring MVC传输对象属性

今天搬砖时遇到一个问题,前端使用JSP+form传输数据,后台使用Spring MVC接收,但是接收到的对象属性一直是null,找了好久才发现原因,代码如下 前端代码 后端代码 需要注意一点 User对象属性需要与表单中name属性中一致(不是id属性,之前接收到的一直为null就是由于只写了id,为预防错误最好id和name都写上且为同一值) 原文地址:https://www.cnblogs.com/lovetq520/p/11655750.html

spring mvc绑定对象String转Date解决入参不能是Date的问题

使用spring的mvc,直接将页面参数绑定到对象中,对象中有属性为Date时会报错,此时需要处理下. 同样的,其他的需要处理的类型也可以用这种方法. 在controller中加入代码 @InitBinder protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { //对于需要转换为Date类型的属性,使用DateEditor进行处理 bin

spring mvc绑定对象String转Date(來自http://blog.csdn.net/whumr1/article/details/8056285)

使用spring的mvc,直接将页面参数绑定到对象中,对象中有属性为Date时会报错,此时需要处理下. 同样的,其他的需要处理的类型也可以用这种方法.(其他类型沒有時間研究,歡迎技術牛人補充) 1.在controller中加入代码 @InitBinderprotected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { //对于需要转换为Date类型的属

Spring Mvc 日志配置

第一步:pom.xml配置,导入需要的jar包 <!-- log4j日志文件管理包版本 --><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.9</log4j.version> <!-- 日志文件管理包 --><dependency>    <groupId>log4j</groupId>    <artifactId>log

Spring MVC返回对象JSON

@RestController 用于返回对象,会自动格式化为JSON @RequestMapping("/user2") public User2 user2(Model model){ model.addAttribute("content", hello + "(第二种)"); User2 user=new User2(); user.setId(1); user.setName("tomas"); user.setPwd

解决Spring Mvc中对象绑定参数重名的问题

html页面 <form method='post' action='url'> 用户名 <input type='text' name='name'> 用户id <input type='text' name='id'> 食品名 <input type='text' name='name'> 食品id <input type='text' name='id'> <input type='text' name='age'> <i

【Spring学习笔记-MVC-7】Spring MVC模型对象-模型属性讲解

作者:ssslinppp       来自为知笔记(Wiz) 附件列表 处理模型数据.png

spring mvc+ELK从头开始搭建日志平台

spring mvc+ELK从头开始搭建日志平台 最近由于之前协助前公司做了点力所能及的事情,居然收到了一份贵重的端午礼物,是给我女儿的一个乐高积木,整个有7大包物件,我花了接近一天的时间一砖一瓦的组织起来,虽然很辛苦但是能够从过程中体验到乐趣.这次将分享从头搭建分布式日志系统,主要是在spring mvc上结合ELK套件实现(之前有些工作由于分工不同由不同的同事来完成,我只是在已经配置好的环境下做开发而已),包含如下这些技术点: spring mvc logback logstash elas