使用 lombok @Slf4j 注解简化日志功能的引入

介绍了如何使用 lombok @Slf4j 注解简化日志功能的引入, 兼谈了重复性管理的问题.

在开发过程中, 打印必要的日志是必不可少的一环, 而要打印日志, 在相关的类中就要引入日志相关属性, 在传统上, 一般是通过 LoggerFactory.getLogger 去实现的:

package net.xiaogd.demo.mybatis.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LogDemoController {

    // 自行声明
    private static final Logger log = LoggerFactory.getLogger((LogDemoController.class));

    //...
}

尽管这已经很简洁, 但如果有大量的类要做类似的操作, 还是略显重复, 从 重复性管理 的角度, 我们怎么才能尽量减少这些重复的样板代码呢?

答案就是利用 lombok@Slf4j 注解.

继续阅读

使用 .editorconfig 文件来统一编程风格

介绍了 .editorconfig 文件及如何使用它来统一项目的编程风格, 兼谈了一些项目管理的心得.

做过长期开发的程序员都知道保持编程风格统一的重要性, 统一的风格能够降低各种成本.

有一句名言是咋说的来着? 代码主要是给人看的, 其次才是给电脑去运行.

但另一方面, 大家又普遍是偷懒的, 对于这些长期会受益, 但短期收益不明显甚至带来麻烦的事, 许多团队中的成员不能说抵制吧, 但至少是积极性不高的.

此时, 假如你是一个团队的领导者, 怎么才能有效地保持项目中编程风格的统一呢? 下面介绍的这个 .editorconfig 文件的方式将能有效地帮助我们.

继续阅读

深入理解什么是端口(port)

深入谈了谈什么是端口, 并在此过程中谈到间接层, naming service 等概念, IoC, 依赖倒置等原则以及 TCP 协议的一些重点知识, 还有端口层的设计思想所带给我们的一些启示.

每当看到有人的简历上写着熟悉 TCP/IP, HTTP 等协议时, 我就忍不住问问他们: 你给我说说, 端口是啥吧! 可惜, 很少有人能说得让人满意... 所以这次就来谈谈 端口(port) , 这个熟悉的陌生人.

在此过程中, 还会谈谈 间接层, naming service 等概念, IoC, 依赖倒置 等原则以及 TCP 协议的一些重点知识.

继续阅读

引入 lombok 简化代码及相关 IDE 设置

简要介绍了 lombok 的特性, 以及如何在 maven 引入和 IDE 中的设置(包括Eclipse 及 Intellij IDEA)

使用 lombok 可以简化一些样板代码的编写, 下面说说如何启用它, 包括了 maven 及 IDE 中的设置(Eclipse 及 Intellij IDEA)

具体例子

开发中经常会遇到一些纯粹作为记录的类, 如 VO, DTO 之类的, 在以往, 需要给它们一一生成所谓的 getter 和 setter. 虽然有 IDE 可以辅助快速生成这样方法, 可大量的这种简单的 get 和 set 方法的存在也是挺碍眼的, 可否简化呢?

答案是可以的, 方式就是借助 lombok 这个代理工具.

继续阅读

启用 -parameters 编译选项简化 mybatis @Param 注解重复问题

介绍了启用 -parameters 编译选项简化 mybatis @Param 注解重复的问题, 包括 maven 的配置及相应 IDE 中的设置(Eclipse 及 Intellij IDEA)

在使用 mybatis 查询的时候, 只需要定义一个查询接口, mybatis 会为我们注入注解实现或是 xml 实现. 但当我们需要传递参数时, 通常需要 @Param 来定义一个名称, 但经常的, 我们也不难发现, 这个名称与参数名称通常是一样的:

User findUser(@Param("username") String username, @Param("password") String password);

如上, usernamepassword 都重复了.

而之所以要这么使用, 是因为 xml 中 ${xxx} 所引用的名称就来自于 @Param 里定义的值:

<select id="findUser" resultType="net.xiaogd.demo.mybatis.entity.User">
    select * from user where username = #{username} and password = #{password}
</select>

这就带来一个重复的问题, 可否简化这个定义, 使得无需重复录入名称, 甚至完全地去掉呢? 比如像下面这样:

User findUser(String username, String password);

答案是可以的, 下面就来说下怎么去做到这一点.

继续阅读