spring boot學習

zhusir發表於2018-08-22

@Resource與@Autowired註解的區別

@Resource預設按照名稱方式進行bean匹配,@Autowired預設按照型別方式進行bean匹配

常用註解:

@Repository:

用於標註資料訪問元件,即DAO元件。

@Service:

用於標註業務層元件。

@RestController:

用於標註控制層元件(如struts中的action),包含@Controller和@ResponseBody。

@Component:

泛指元件,當元件不好歸類的時候,我們可以使用這個註解進行標註。

@ComponentScan:

元件掃描。個人理解相當於,如果掃描到有@Component @Controller @Service等這些註解的類,則把這些類註冊為bean。

@Configuration:

指出該類是 Bean 配置的資訊源,相當於XML中的,一般加在主類上。

@EnableAutoConfiguration:

讓 Spring Boot 根據應用所宣告的依賴來對 Spring 框架進行自動配置,一般加在主類上。

@RequestParam,@PathParm,@PathVariable和@@RequestBody區別

這四個註解都是用來傳引數的,第一個註解是用在不是rest風格的url上,如user?id=1.

第二和第三用於rest風格,如user/1,最後一個是用於傳遞物件的

@ControllerAdvice + @ExceptionHandler 全域性處理 Controller 層異常


讀取配置檔案

1.設計一個實體類,對應配置檔案中的key

2.在該類的類名上加三個註解:

(1)@component:宣告這是一個元件,注意要在啟動類上加@componentscan

註解,使spring能掃描到這個包

(2)@ConfigurationProperties(prefix="xxx")

(3)@PropertySource("classpath:自定義配置檔案的名稱")

3.使用時將該類@autowire即可

面向切面程式設計之攔截器,過濾器,監聽器

(1)攔截器

應用場景:可以做全域性日誌,記錄使用者登入時間,處理全域性異常

第一步:建立一個類實現HandlerInterceptor介面,重寫介面的方法,在該類上加@Component註解

第二步:在入口類的目錄或者兄弟目錄下建立一個類繼承WebMvcConfigurerAdapter類並重寫addInterceptors方法;在類上加@SpringBootConfiguration

(2)過濾器

應用場景:編碼轉換,日誌記錄,判斷使用者是否登入和是否有相應的許可權,重置session有效期

第一步:新建一個類implements Filter介面,並重寫其中的方法。在這個類上加@WebFilter註解,說明過濾器名字和過濾模式。

第二步:在啟動類上加@componentsan註解

第三步:通過過濾器註冊配置類使用過濾器,配置相關的過濾器(例項化並使用)

(3)監聽器

應用場景:獲取當前線上人數,在系統初始化時做一些工作(例如刪日誌,獲取絕對路徑等)

spring boot實現跨域

在controller類上加@CrossOrigin註解,或者新增過濾器,在header'中加資訊

處理全域性異常

一:@ControllerAdvice + @ExceptionHandler 全域性處理 Controller 層異常,注意只能捕獲comtroller層的異常

二:基於Springboot自身的全域性異常統一處理,主要是實現ErrorController介面或者繼承AbstractErrorController抽象類或者繼承BasicErrorController類

三:基於AOP也可以實現異常的全域性處理

@validated驗證框架的使用

1.引入pom包

2.在bean上新增註解:

      @Min,@NotNull等

      tips:    ID為int型別時,只能判斷min,max等,不能判斷是否前端傳值時,可以讓Id= -1,然後@Min(value = 0,message= "id不能為空")方式判斷,如果不傳則會拋異常

3.寫一個處理全域性異常的方法,此方法需要捕獲MethodArgumentNotValidException 異常,可以在此異常處理類內捕獲引數的異常

4.在controller的引數中加入@validated註解,註解寫在@ResposenBody後面,然後該controller丟擲MethodArgumentNotValidException 異常。

5.分組

需要分組校驗時(如ID欄位更新時需要,新增時不需要,這時就需要分組),在bean的屬性上加的註解中進行分組,例如

@NotNull(groups={Update.class})
String name;
Update.class是一個介面

會出現的問題:如果某個屬性沒有加分組,這時不會對這個屬性進行校驗

解決辦法:在Update的介面中繼承自Default類

例如:

public interface Update extends Default {}複製程式碼

分組以後在controller中將@validated改為@validated(Update.class),網上的辦法還需要增加insert.class的介面,這裡繼承了Default類以後其實是不需要寫了

@transactional支援事務

1.在需要事務支援的方法上面加@transactional註解,一般加在service的方法或者service的類上

2.@transactional是基於AOP的動態代理,原理是在執行的mapper上加上代理,如果一個事務執行失敗會丟擲runtimeException,這時代理類會捕獲這個異常並進行回滾

3.可以寫一個自定義異常繼承自runtimeException,在@transactional的方法中丟擲這個異常,在呼叫此方法的類中捕獲自定義異常並處理。

注意:內部類呼叫不會回滾

如果@transactional標註的方法與呼叫方法處於同一個類(即內部類呼叫)時事務是不會起作用的(因為物件不能代理它本身),解決方法就是將他們寫在不同的類中

spring Boot 中使用mybatis註解方式

  1. 定義mapper的介面
  2. 在介面上面加兩個註解:@Mapper和@Repository
  3. 在介面裡面定義sql語句及方法

例如:service層呼叫時,只需要注入此mapper,呼叫mapper.updateClass()即可

@Update("update class set title = #{title}, level = #{level}, type = #{type} where id = #{id} ")
int updateClass(XDClass xdClass);複製程式碼



相關文章