引言:Spring Boot是非常高效的開發框架,lombok是一套代碼模板解決方案,將極大提升開發的效率,這裏介紹給大家使用。
1. Lombok
Lombok想要解決了的是在我們實體Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不會用到,但是某些時候仍然需要複寫,以期方便使用的方法;在使用Lombok之後,將由其來自動幫你實現代碼生成,注意,其是在運行過程中,幫你自動生成的。就是說,將極大減少你的代碼總量。
Lombok的官方地址: https://projectlombok.org/
2. LomBok的安裝
在SpringBoot1.4.1項目的pom.xml中新增如下信息:
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- </dependency>
針對不同的IDE,lombok提供了不同的解決方案,筆者使用的是STS,故這介紹一下如何使用lombok插件在STS中:
>> 1. 下載最新的lombok,最新版本。1.16.10 https://projectlombok.org/download.html
>> 2. 切到lombok下載的目錄,運行命令: java -jar lombok.jar
選中目錄之後,就會看到如下窗口:
大家可以看到,這裏的會使用javaagent的方式寫入STS的啓動過程中。在確定之後,我們切到sts的安裝目錄,驗證一下STS.ini文件:
大家也可以發現,在STS的目錄下,也有lombok.jar文件的存在,整個安裝過程即可完成。
3. Lombok的使用
主要是基於標註來進行信息的封裝和使用:
@NonNull: 標識對象是否爲空,爲空則拋出異常
@Getter: 自動生成Getter方法
@Setter: 自動生成Setter
@ToString: 覆蓋tostring方法
@EqualsAndHashCode: 覆蓋equal和hashCode方法
@Data: @Getter/@Setter, @ToString, @EqualAndHashCode等組合
@Slf4j: 默認使用slf4j的日誌對象
4. 使用示例:
示例Getter/Setter方法以及日誌使用:
- import lombok.Data;
- import lombok.extern.slf4j.Slf4j;
- @Slf4j
- @Data
- public class TestBean {
- private String name;
- private int age;
- }
測試用例:
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.test.context.junit4.SpringRunner;
- import lombok.extern.slf4j.Slf4j;
- @RunWith(SpringRunner.class)
- @SpringBootTest
- @Slf4j
- public class TestEntityBean {
- TestBean bean = new TestBean();
- @Autowired
- private MyCase mycase;
- //@Test
- public void test() {
- bean.setAge(123);
- bean.setName("zhangsan");
- log.info(bean.toString());
- }
- }
- . ____ _ __ _ _
- /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
- ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
- \\/ ___)| |_)| | | | | || (_| | ) ) ) )
- ' |____| .__|_| |_|_| |_\__, | / / / /
- =========|_|==============|___/=/_/_/_/
- :: Spring Boot :: (v1.4.1.RELEASE)
- 2016-10-24 11:49:19.521 INFO 700 --- [ main] org.cuckoo.report.brain.TestEntityBean : Starting TestEntityBean on 08-201412015324 with PID 700 (started by junfengchen in D:\Dev\workspace\JSPDemo)
- 2016-10-24 11:49:19.523 INFO 700 --- [ main] org.cuckoo.report.brain.TestEntityBean : No active profile set, falling back to default profiles: default
- 2016-10-24 11:49:19.647 INFO 700 --- [ main] o.s.w.c.s.GenericWebApplicationContext : Refreshing org.springframework.web.context.support.GenericWebApplicationContext@4f80542f: startup date [Mon Oct 24 11:49:19 CST 2016]; root of context hierarchy
- 2016-10-24 11:49:22.191 INFO 700 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@4f80542f: startup date [Mon Oct 24 11:49:19 CST 2016]; root of context hierarchy
- 2016-10-24 11:49:22.290 INFO 700 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/foo]}" onto public java.lang.String org.cuckoo.report.brain.WelcomeController.foo(java.util.Map<java.lang.String, java.lang.Object>)
- 2016-10-24 11:49:22.293 INFO 700 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/],methods=[GET]}" onto public java.lang.String org.cuckoo.report.brain.WelcomeController.welcome(java.util.Map<java.lang.String, java.lang.Object>)
- 2016-10-24 11:49:22.295 INFO 700 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
- 2016-10-24 11:49:22.296 INFO 700 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
- 2016-10-24 11:49:22.351 INFO 700 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
- 2016-10-24 11:49:22.351 INFO 700 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
- 2016-10-24 11:49:22.409 INFO 700 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
- 2016-10-24 11:49:22.642 INFO 700 --- [ main] org.cuckoo.report.brain.TestEntityBean : Started TestEntityBean in 3.868 seconds (JVM running for 4.854)
- 2016-10-24 11:49:22.676 INFO 700 --- [ main] org.cuckoo.report.brain.TestEntityBean : TestBean(name=zhangsan, age=123)
- 2016-10-24 11:49:22.691 INFO 700 --- [ Thread-2] o.s.w.c.s.GenericWebApplicationContext : Closing org.springframework.web.context.support.GenericWebApplicationContext@4f80542f: startup date [Mon Oct 24 11:49:19 CST 2016]; root of context hierarchy
大家可以注意到@Slf4j替代掉了冗餘的logger聲明語句, @Data不必在使用Getter/Setter方法,其中toString默認反射對象中的所有屬性,非常的好用。
原文:bladestone著
原文地址:https://blog.csdn.net/blueheart20/article/details/52909775