常用注解
@SpringBootApplication
前幾章,在系統(tǒng)啟動類里面,都加入了此啟動注解,此注解是個組合注解,包括了@SpringBootConfiguration
、@EnableAutoConfiguration
和@ComponentScan
注解。
- @SpringBootConfiguration 繼承至
@Configuration
,對于熟悉spring
的開發(fā)者而言,此標(biāo)注當(dāng)前類是配置類,并會將當(dāng)前類內(nèi)聲明的一個或多個以@Bean注解標(biāo)記的方法的實例納入到srping容器中,并且實例名就是方法名。 - @EnableAutoConfiguration 這個注解就是
springboot
能自動進(jìn)行配置的魔法所在了。主要是通過此注解,能所有符合自動配置條件的bean的定義加載到spring
容器中,比如根據(jù)spring-boot-starter-web
,來判斷你的項目是否需要添加了webmvc
和tomcat
,就會自動的幫你配置web項目中所需要的默認(rèn)配置。具體的使用,會在后期自定義實現(xiàn)一個自動啟動類時,會講解到它的一些機制。此章節(jié)就不深入了,只需要它是這個用途即可,一般上也單獨使用不要這個注解,但比如需要排除一些無需自動配置的類時,可利用exclude
進(jìn)行排除。 - @ComponentScan 這個熟悉
spring
的開發(fā)者也應(yīng)該熟悉,會掃描當(dāng)前包及其子包下被@Component,@Controller,@Service,@Repository等注解標(biāo)記的類并納入到spring容器中進(jìn)行管理。
@Controller 和 @RestController
@RestController 是Spring4之后加入的注解,原來在@Controller中返回json需要@ResponseBody來配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默認(rèn)返回json格式。而@Controller是用來創(chuàng)建處理http請求的對象,一般結(jié)合@RequestMapping
使用。
@RequestMapping
一個用來處理請求地址映射的注解,可用于類或方法上。用于類上,表示類中的所有響應(yīng)請求的方法都是以該地址作為父路徑。
常用屬性(摘抄至網(wǎng)絡(luò)):
-
value, method;
value: 指定請求的實際地址,指定的地址可以是URI Template 模式(后面將會說明);
method: 指定請求的method類型, GET、POST、PUT、DELETE等;
-
consumes,produces;
consumes: 指定處理請求的提交內(nèi)容類型(Content-Type),例如application/json, text/html;
produces: 指定返回的內(nèi)容類型,僅當(dāng)request請求頭中的(Accept)類型中包含該指定類型才返回;
-
params: 指定request中必須包含某些參數(shù)值是,才讓該方法處理。
headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求。
常用的基本上就value
和method
了。 其簡化注解有
@GetMapping 等同于 @RequestMapping(method = RequestMethod.GET)
@PostMapping 等同于 @RequestMapping(method = RequestMethod.POST)
@PutMapping 等同于 @RequestMapping(method = RequestMethod.PUT)
@DeleteMapping 等同于 @RequestMapping(method = RequestMethod.DELETE)
@PatchMapping 等同于 @RequestMapping(method = RequestMethod.PATCH)
@RequestBody和@ResponseBody
- @RequestBody注解允許request的參數(shù)在reqeust體中,常常結(jié)合前端POST請求,進(jìn)行前后端交互。
- @ResponseBody注解支持將的參數(shù)在reqeust體中,通常返回json格式給前端。
@PathVariable、@RequestParam、@RequestAttribute
- @PathVariable用來接收參數(shù),如/path/001,可接收001作為參數(shù)
- @RequestParam 用來接收URL中的參數(shù),如/param?id=001,可接收001作為參數(shù)
- @RequestAttribute用于訪問由過濾器或攔截器創(chuàng)建的、預(yù)先存在的請求屬性,效果等同與request.getAttrbute().
@Component、@Service、@Repository
這三者都是申明一個單例的bean類并納入spring容器中,后兩者其實都是繼承于
@Component
。
- @Component 最普通的組件,可以被注入到spring容器進(jìn)行管理
- @Repository 作用于持久層
- @Service 作用于業(yè)務(wù)邏輯層
通常一些類無法確定是使用@Service還是@Component時,注解使用@Component
,比如redis
的配置類等
@ModelAttribute
主要是綁定請求參數(shù)到指定對象上。此注解可被用于方法、參數(shù)上。
- 運用在參數(shù)上,會將客戶端傳遞過來的參數(shù)按名稱注入到指定對象中,并且會將這個對象自動加入ModelMap中,便于View層使用;
- 運用在方法上,會在每一個@RequestMapping 標(biāo)注的方法前執(zhí)行 ,如果有返回值,則自動將該返回值加入到ModelMap中;
由于現(xiàn)在都采用前后端分離
開發(fā),故此注解相對用的較少了,但對于一些在每次請求前需要進(jìn)行一些額外操作時。使用此注解依然是個選擇,比如進(jìn)行統(tǒng)一的業(yè)務(wù)校驗等,但使用此注解實現(xiàn)類似功能時需要注意,使用異步調(diào)用時,比如callable
或者DeferredResult
時,被此注解的方法會執(zhí)行兩次
,因為異步請求時,是掛起另一個線程去重新執(zhí)行,對于配置了攔截器而已,它們的執(zhí)行順序為
攔截器的相關(guān)知識點會在下章進(jìn)行說明,這里只是特殊說明下。解決方案的話可簡單根據(jù)DispatcherType類型進(jìn)行判斷,異步時對應(yīng)類型為:ASYNC,第一次請求正常為:REQUEST。
@Qualifier:當(dāng)有多個同一類型的Bean時,可以用@Qualifier(“name”)來指定。與@Autowired配合使用。@Qualifier限定描述符除了能根據(jù)名字進(jìn)行注入,但能進(jìn)行更細(xì)粒度的控制如何選擇候選者,具體使用方式如下:
@Autowired
@Qualifier(value = “demoInfoService”)
private DemoInfoService demoInfoService;
@Resource(name=”name”,type=”type”):沒有括號內(nèi)內(nèi)容的話,默認(rèn)byName。與@Autowired干類似的事。
@Api @ApiOperation @ApiParam
@Api @ApiOperation @ApiParam主要是用于swagger提供開發(fā)者文檔,文檔中生成的注釋內(nèi)容
JPA注解
@Entity:@Table(name=”“):表明這是一個實體類。一般用于jpa這兩個注解一般一塊使用,但是如果表名和實體類名相同的話,@Table可以省略
@MappedSuperClass:用在確定是父類的entity上。父類的屬性子類可以繼承。
@NoRepositoryBean:一般用作父類的repository,有這個注解,spring不會去實例化該repository。
@Column:如果字段名與列名相同,則可以省略。
@Id:表示該屬性為主鍵。
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”):表示主鍵生成策略是sequence(可以為Auto、IDENTITY、native等,Auto表示可在多個數(shù)據(jù)庫間切換),指定sequence的名字是repair_seq。
@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1):name為sequence的名稱,以便使用,sequenceName為數(shù)據(jù)庫的sequence名稱,兩個名稱可以一致。
@Transient:表示該屬性并非一個到數(shù)據(jù)庫表的字段的映射,ORM框架將忽略該屬性。如果一個屬性并非數(shù)據(jù)庫表的字段映射,就務(wù)必將其標(biāo)示為@Transient,否則,ORM框架默認(rèn)其注解為@Basic。@Basic(fetch=FetchType.LAZY):標(biāo)記可以指定實體屬性的加載方式
@JsonIgnore:作用是json序列化時將Java bean中的一些屬性忽略掉,序列化和反序列化都受影響。
@JoinColumn(name=”loginId”):一對一:本表中指向另一個表的外鍵。一對多:另一個表指向本表的外鍵。
@OneToOne、@OneToMany、@ManyToOne:對應(yīng)hibernate配置文件中的一對一,一對多,多對一。
全局異常處理
@ControllerAdvice:包含@Component。可以被掃描到。統(tǒng)一處理異常。
@ExceptionHandler(Exception.class):用在方法上面表示遇到這個異常就執(zhí)行以下方法。
-
spring
+關(guān)注
關(guān)注
0文章
340瀏覽量
14343 -
系統(tǒng)
+關(guān)注
關(guān)注
1文章
1017瀏覽量
21339 -
注解
+關(guān)注
關(guān)注
0文章
18瀏覽量
2674 -
SpringBoot
+關(guān)注
關(guān)注
0文章
173瀏覽量
178
發(fā)布評論請先 登錄
相關(guān)推薦
評論