一、注解(annotations)列表
@SpringBootApplication:包含了@ComponentScan、@SpringBootConfiguration和@EnableAutoConfiguration注解。其中@ComponentScan讓spring Boot掃描到Configuration類並把它加入到程序上下文。
@SpringBootConfiguration:等同於spring的XML配置文件;使用Java代碼可以檢查類型安全。
@EnableAutoConfiguration: 自動配置。
@ComponentScan: 組件掃描,可自動發現和裝配一些Bean。
@Component:可配合CommandLineRunner使用,在程序啟動后執行一些基礎任務。
@RestController:注解是@Controller和@ResponseBody的合集,表示這是個控制器bean,並且是將函數的返回值直 接填入HTTP響應體中,是REST風格的控制器。
@Autowired:自動導入。
@PathVariable:獲取參數。
@JsonBackReference:解決嵌套外鏈問題。
@RepositoryRestResourcepublic:配合spring-boot-starter-data-rest使用。
二、注解(annotations)詳解
@SpringBootApplication:申明讓spring boot自動給程序進行必要的配置,這個配置等同於:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三個配置。
@SpringBootApplication // 相當於 @Configuration @EnableAutoConfiguration @ComponentScan 這三個注解 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@EnableAutoConfiguration:第二個類級別的注解是 @EnableAutoConfiguration 。這個注解告訴Spring Boot根據添加的jar依賴猜測你想如何配置Spring。由於 spring-boot-starter-web 添加了Tomcat和Spring MVC,所以auto-configuration將假定你正在開發一個web應用並相應地對Spring進行設置。Starter POMs和Auto-Configuration:設計auto-configuration的目的是更好的使用"Starter POMs",但這兩個概念沒有直接的聯系。你可以自由地挑選starter POMs以外的jar依賴,並且Spring Boot將仍舊盡最大努力去自動配置你的應用。
你可以通過將 @EnableAutoConfiguration 或 @SpringBootApplication 注解添加到一個 @Configuration 類上來選擇自動配置。
注:你只需要添加一個 @EnableAutoConfiguration 注解。我們建議你將它添加到主 @Configuration 類上。
如果發現應用了你不想要的特定自動配置類,你可以使用 @EnableAutoConfiguration 注解的排除屬性來禁用它們。
@Configuration @EnableAutoConfiguration(exclude{DataSourceAutoConfiguration.class}) public class MyConfiguration { }
@Configuration:Spring Boot提倡基於Java的配置。盡管你可以使用一個XML源來調用 SpringApplication.run() ,我們通常建議你使用 @Configuration 類作為主要源。一般定義 main 方法的類也是主要 @Configuration 的一個很好候選。你不需要將所有的 @Configuration 放進一個單獨的類。 @Import 注解可以用來導入其他配置類。另外,你也可以使用 @ComponentScan 注解自動收集所有的Spring組件,包括 @Configuration 類。
如果你絕對需要使用基於XML的配置,我們建議你仍舊從一個 @Configuration 類開始。你可以使用附加的 @ImportResource 注解加載XML配置文件。
@Configuration注解該類,等價 與XML中配置beans;用@Bean標注方法等價於XML中配置bean。如下微信公眾號wx-java-tools工具配置類bean配置:
#application.properties配置文件
#微信對接配置
wechat.appId=wx77b7ff3f08e8****
wechat.secret=c240f137ec95fb193354a0399e******
wechat.token=qiujuan
@Component @ConfigurationProperties(prefix = "wechat") // 此為上文配置文件中內容 public class WeChatMpConfig { private String appId; private String secret; private String token; @Bean public WxMpService wxMpService(){ WxMpService wxMpService = new WxMpServiceImpl(); wxMpService.setWxMpConfigStorage(wxMpConfigStorage()); return wxMpService; } @Bean public WxMpConfigStorage wxMpConfigStorage(){ WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage(); wxMpConfigStorage.setAppId(appId); wxMpConfigStorage.setSecret(secret); wxMpConfigStorage.setToken(token); return wxMpConfigStorage; } }
@ControllerAdvice:包含@Component。可以被掃描到。統一處理異常。
@ExceptionHandler(Exception.class):用在方法上面表示遇到這個異常就執行以下方法。
/** * 全局異常處理 */ @ControllerAdvice class GlobalDefaultExceptionHandler { public static final String DEFAULT_ERROR_VIEW = "error"; @ExceptionHandler({TypeMismatchException.class,NumberFormatException.class}) public ModelAndView formatErrorHandler(HttpServletRequest req, Exception e) throws Exception { ModelAndView mav = new ModelAndView(); mav.addObject("error","參數類型錯誤"); mav.addObject("exception", e); mav.addObject("url", RequestUtils.getCompleteRequestUrl(req)); mav.addObject("timestamp", new Date()); mav.setViewName(DEFAULT_ERROR_VIEW); return mav; }}