在我的Spring MVC webapp中的每个控制器中,都有这一行:
static Logger logger = Logger.getLogger(ControllerName.class);
这有点重复。如何在不重复此行的情况下编写“记录器提供的”控制器?
由于
答案 0 :(得分:1)
也许你不喜欢它,但我喜欢的Project Lombok之一就是这个。您可以使用@ Log4j(或更好的@ Slf4j)为您的类添加注释,以获得名为 log 的不可见记录器。
答案 1 :(得分:0)
第一个建议是为所有控制器提供一个公共基类,其中包含以下行:
public abstract class AbstractBaseController {
protected Logger logger = Logger.getLogger(this.getClass());
}
请注意,记录器不再是static
- 这对单件Spring服务/控制器来说并不是一个问题,但我仍然觉得它有点尴尬。另见:Why do we declare Loggers static final?
它也有点违反OO原则,不允许你继承其他任何东西。这实际上是Java语言的限制,在Scala / slf4s中你可以写:
class SomeController extends BaseController with Logging
其中BaseController
是基类,而Logging
是 trait ,它将logger
字段混合到SomeController
类。非常方便。