本文已参与「新人创作礼」活动,一起开启掘金创作之路。
添加依赖
<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方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度