1. 程式人生 > >Spring Boot下的lombok安裝以及使用簡介

Spring Boot下的lombok安裝以及使用簡介

引言: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>
 注意這裡無需指定版本,因為Spring Boot中已經預設引入了這個類庫,且指定了其scope。 這個即將lombok引入了專案,可以引用其類庫標註。

  針對不同的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等組合

     @@NoArgsConstructor @AllArgsConstructor註解使用

    @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.s[email protected]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.s[email protected]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.s[email protected]4f80542f: startup date [Mon Oct 24 11:49:19 CST 2016]; root of context hierarchy

  大家可以注意到@Slf4j替代掉了冗餘的logger宣告語句, @Data不必在使用Getter/Setter方法,其中toString預設反射物件中的所有屬性,非常的好用。