SpringBoot常見注解
點擊上方藍色字體,選擇“標星公眾號”
優(yōu)質(zhì)文章,第一時間送達
? 作者?|??記憶的痕跡_42
來源 |? urlify.cn/7Zb6r2? ??
在使用SpringBoot的過程中,幾乎沒有了XML配置,采用注解+JavaConfig方式開發(fā),這樣做的好處是:
采用純java代碼,不在需要配置繁雜的xml文件
在配置中也可享受面向?qū)ο髱淼暮锰?/p>
類型安全對重構可以提供良好的支持
減少復雜配置文件的同時亦能享受到springIoC容器提供的功能
@SpringBootApplication
這個注解很常見了,每次在啟動SpringBoot項目的時候,都會見到它,它作用在類上,標識該類為SpringBoot項目啟動類。
并且讓SpringBoot自動給程序進行必要的配置,等同于@Configuration、@EnableAutoConfiguration、@ComponentScan這三個注解。
@Configuration
相當于傳統(tǒng)Spring的xml配置文件。
如果第三方庫需要用到xml文件,建議通過@Configuration類作為項目的配置主類,可以使用@ImportResource注解加載xml配置文件。
@EnableAutoConfiguration 自動配置。
SpringBoot自動配置(auto-configuration),嘗試根據(jù)你添加的啟動器(starter)自動配置你的SpringBoot應用。
你可以將@EnableAutoConfiguration注解或者@SpringBootApplication注解添加到一個@Configuration類上來選擇自動配置。
如果發(fā)現(xiàn)應用了你不想要的特定自動配置類,你可以使用@EnableAutoConfiguration注解的排除屬性來禁用它們。
@ComponentScan
如果某個類加上@ComponentScan注解,則該類會自動發(fā)現(xiàn)掃描組件。
也就是說,如果掃描到有@Component、@Controller、@Service等這些注解的類,并注冊為Bean,可以自動收集所有的Spring組件,包括@Configuration類。
我們經(jīng)常使用@ComponentScan注解搜索beans,并結合@Autowired注解導入。如果沒有配置的話,SpringBoot會掃描啟動類所在包下以及子包下的使用了@Component、@Controller、@Service、@Repository等注解的類。
@Controller
@Controller注解用于定義控制器類,在SpringBoot中由控制器負責將用戶發(fā)來的URL請求轉(zhuǎn)發(fā)到對應的服務接口(Controller層)。
一般這個注解用在類上,控制器方法需要加上@RequestMapping注解。
@ResponseBody
如果控制器方法加上@ResponseBody注解,該方法的返回結果將直接寫入HTTP response body中,一般在異步獲取數(shù)據(jù)時使用,用于構建RESTful的api。
在使用@RequestMapping后,返回值通常解析為跳轉(zhuǎn)路徑,加上@esponsebody后返回結果不會被解析為跳轉(zhuǎn)路徑,而是直接寫入HTTP response body中。
比如異步獲取json數(shù)據(jù),加上@Responsebody后,會直接返回json數(shù)據(jù)。該注解一般會配合@RequestMapping一起使用。
@RestController
@RestController注解是@Controller和@ResponseBody的合集。
使用在類上,表示該類是控制器,并且類中所有控制器方法的返回值直接填入HTTP響應體中,是RESTful風格的控制器,控制器方法返回JSON數(shù)據(jù)。
@RequestMapping
提供路由信息,負責URL到Controller中的具體方法的映射。
@Import
用來導入其他配置類(加了@Configuration注解的類)。
@ImportResource
用來加載xml配置文件。
@PathVariable
獲取URL上的參數(shù)(Restful風格接口)。
@Service
一般用于修飾service層的組件
@Repository
使用@Repository注解可以確保DAO或者repositories提供異常轉(zhuǎn)譯,這個注解修飾的DAO或者repositories類會被ComponetScan發(fā)現(xiàn)并配置,同時也不需要為它們提供XML配置項。
@Bean
用@Bean標注方法等價于XML中配置的bean,意思是產(chǎn)生一個bean,并交給SpringBoot管理。
@Value
注入SpringBoot中的配置文件——application.properties配置的屬性的值。
@Inject
等價于默認的@Autowired,只是沒有required屬性。
@Component
泛指組件,當組件不好歸類的時候,我們可以使用這個注解進行標注。
@AutoWired
自動導入依賴的bean。byType方式。把配置好的Bean拿來用,完成屬性、方法的組裝,它可以對類成員變量、方法及構造函數(shù)進行標注,完成自動裝配的工作。當加上(required=false)時,就算找不到bean也不報錯。
@Qualifier
當有多個同一類型的Bean時,可以用@Qualifier(“name”)來指定。與@Autowired配合使用。@Qualifier限定描述符除了能根據(jù)名字進行注入,但能進行更細粒度的控制如何選擇候選者。
@Resource(name=”name”,type=”type”)
沒有括號內(nèi)內(nèi)容的話,默認byName。與@Autowired干類似的事。
@JsonBackReference
解決嵌套外鏈問題。
@RepositoryRestResourcepublic
配合spring-boot-starter-data-rest使用。
全局異常注解
@ControllerAdvice
包含@Component,可以被掃描到。統(tǒng)一處理異常。
@ExceptionHandler(Exception.class)
用在方法上面表示遇到這個異常就執(zhí)行以下方法。
JPA注解
JPA是ORM思想的規(guī)范接口,存在兩個核心:
建立表與實體類的映射。
建立表字段與實體類屬性映射,操作實體類就是操作表。
Hibernate框架作為JPA的實現(xiàn)者之一。
@Entity&@Table(name="表名")
@Entity注解表明這是一個實體類。
@Table(name="表名")映射一張表,但是如果表名和實體類名相同的話,@Table可以省略。
@MappedSuperClass
用在確定是父類的entity上。父類的屬性子類可以繼承。
@NoRepositoryBean
一般用作父類的repository,有這個注解,SpringBoot不會去實例化該repository。
@Column
建立表字段與實體類屬性映射,如果字段名與列名相同,則可以省略。
@Id
表示該屬性為主鍵。
@Transient
表示該屬性并非一個到數(shù)據(jù)庫表的字段的映射,ORM框架將忽略該屬性。
如果一個屬性并非數(shù)據(jù)庫表的字段映射,就務必將其標示為@Transient,否則,ORM框架默認其注解為@Basic。
@Basic
@Basic(fetch=FetchType.LAZY):標記可以指定實體屬性的加載方式
@GeneratedValue
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”)表示主鍵生成策略是sequence(可以為Auto、IDENTITY、native等,Auto表示可在多個數(shù)據(jù)庫間切換),指定sequence的名字是repair_seq。
@SequenceGeneretor
@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1):name為sequence的名稱,以便使用,sequenceName為數(shù)據(jù)庫的sequence名稱,兩個名稱可以一致。
@JsonIgnore
作用是json序列化時將Java bean中的一些屬性忽略掉,序列化和反序列化都受影響。
@OneToOne、@OneToMany、@ManyToOne
對應多表之間的一對一,一對多,多對一關系。
粉絲福利:108本java從入門到大神精選電子書領取
???
?長按上方鋒哥微信二維碼?2 秒 備注「1234」即可獲取資料以及 可以進入java1234官方微信群
感謝點贊支持下哈?
