Lombok简化开发

99 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

添加依赖

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

Lombok原理

运行时能够解析的注解,必须将 @Retention 设置为 RUNTIME,这样就可以通过反射拿到该注解。java.lang.reflect 反射包种提供了一个接口 AnnotatedElement,该接口定义了获取注解的几个方法:Class,Constructor,Field,Method 等,都实现了该接口。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
}

常用注解

Lombok提供注解方式来提高代码的简洁性,常用注解有:

@Data
@Setter @Getter
@NonNull
@Synchronized
@ToString
@EqualsAndHashCode
@Cleanup
@SneakyThrows

@ToString 类使用@ToString注解,Lombok会生成一个toString()方法,默认情况下,会输出类名、所有属性(会按照属性定义顺序),用逗号来分割。

@Data //Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法

@NoArgsConstructor //无参构造器
@AllArgsConstructor //有参构造器

@Synchronized 该注解自动添加到同步机制,有趣的是,生成的代码并不是直接锁方法,而是锁代码块, 作用范围是方法上 使用方法:

private DateFormat format = new SimpleDateFormat("MM-dd-YYYY");
@Synchronized
public String synchronizedFormat(Date date) {
    return format.format(date);
}
@ToString
@Data 
@Component
@ConfigurationProperties(prefix = "mycar")
pubLic class Car {
    private int brand ;
    private Integer price;
}

在这里插入图片描述

日志类

通过配置了日志类可以看到我们的相关输出信息,比如什么时候进入的类什么时候出去的都可以看到。

@SLf4j
@Re stController
pubLic cLass HelloControlLer {
@ResponseBody
@RequestMapping(Ov" /hello" )|
pubLic String handLe01(){
    Log. info("请求进来了");
    return "hello, springboot";
}
}

在这里插入图片描述 在这里插入图片描述

优点:

能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率 让代码变得简洁,不用过多的去关注相应的方法 属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等 缺点:

不支持多种参数构造器的重载 虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度