spring和spring boot常用註解及使用

2020-12-17 每天進步一點D

1. @Controller

控制層組件,定義一個springMVC的控制器類,往往需要和@RequestMapping配合使用。

2. @RestController

相當於@ResponseBody+@Controller合在一起的作用。

3. @Service

服務層組件,用於標註業務層組件,表示定義一個bean,自動根據bean的類名實例化一個首寫字母為小寫的bean,也可以指定bean的名稱:@Service(「beanName」)。

4. @Repository

持久層組件,用於標註數據訪問組件,即DAO組件。

5. @Component

把普通pojo實例化到spring容器中,相當於配置文件中的 <bean id=""/>。

6. @RequestMapping

用於配置控制層的訪問URL,可以用在控制器類上和控制器方法上,如果用在控制器類上,則訪問類中的方法是要加上類上的路徑,例如:

@Controller

@RequestMapping("/personal/linkInfo")

public class LinkInfoController {

@RequestMapping(value = "/addLinkInfo")

public String addLinkInfo(LinkInfoReq linkInfoReq) {

linkInfoService.addLinkInfo(linkInfoReq);

return "redirect:/personal/linkInfo/toLinkInfo";

}

}

上述代碼的訪問路徑就是XXX/personal/linkInfo/addLinkInfo。

@RequestMapping原始碼如下圖:

a) value:設置訪問的URL,數組,可以將多個請求映射到一個方法上去。支持通配符配置

代碼示例:

@RequestMapping(value = {"/page","/page*"})

public void getInfo() {

}

上述代碼訪問路徑可以是:XXX/page,XXX/pageadc等滿足value條件的路徑。

b) method:設置訪問的方法,數組,可是設置多個訪問方法映射到同一個方法上,默認為GET方法

代碼示例:

@RequestMapping(value = "/page", method = RequestMethod.POST)

public void getInfo() {

}

上述代碼 /page路徑就只能用POST方法才能請求。

method的可選值有GET,HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE。

c) params:指定request中必須包含某些參數值是,才讓該方法處理。數組。

@RequestMapping(value = "/page", params = {"type=1"})

public void getInfo() {

}

上述代碼/page路徑只有請求參數中包含type且值等於1時才能訪問該方法。

d) headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求。數組。

示例代碼:

@RequestMapping(value = "/page", headers = {" content-type=text/plain " })

public void getInfo() {

}

上述代碼/page路徑只有headers中content-type=text/plain才能訪問該方法。

e) consumes:指定處理請求的提交內容類型(Content-Type),例如application/json, text/html。

f) produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回。

7. @ResponseBody

通常使用在controller方法上,作用是將方法的返回值通過合適的HttpMessageConverter轉換成特定格式寫入到response的body區域,然後返回給客戶端,如果沒有使用@RequestBody註解,方法返回值將會封裝到ModelAndView並解析返回視圖。

8. @RequestParam

接受的參數來自requestHeader,即請求頭,用來接收GET和POST請求參數並將參數賦值到被@RequestParam註解的變量上,同樣可以使用requet.getParameter(「name」)獲取,默認的參數接受方式,如果controller方法的參數未使用@RequestParam,則默認也是使用@RequestParam接受參數。用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內容。

@RequestParam有三個配置參數:

a) required:是否必須,默認true,必須。

b) defaultValue:默認值,請求的參數為空時使用默認值。

c) value:請求的參數名。

9. @RequestBody

接受的參數來自requestBody,即請求體,一般用於處理非 Content-Type: application/x-www-form-urlencoded編碼格式的數據,比如:application/json、application/xml等類型的數據。

10. @Autowired

它可以對類成員變量,方法及構造函數進行標註,完成自動裝配工作,可以消除set,get方法。

11. @Resource

其作用和@Autowired相似。

不同點:

@Resource是Java自己的註解,@Resource有兩個屬性重要屬性,分是name和type;Spring將@Resource註解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。所以如果使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。如果既不指定name也不指定type屬性,這時將通過反射機制使用byName自動注入策略。

@Autowired是spring的註解,是spring2.5版本引入的,@Autowired只根據type進行注入,不會去匹配name。如果涉及到type無法辨別注入對象時,那需要依賴@Qualifier註解一起來修飾。

@Resource裝配順序

a) 如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則拋出異常

b) 如果指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常

c) 如果指定了type,則從上下文中找到類型匹配的唯一bean進行裝配,找不到或者找到多個,都會拋出異常

d) 如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退為一個原始類型進行匹配,如果匹配則自動裝配;

推薦使用@Resource,不用謝set方法,並且這個註解屬於java自己的,減少了與spring的耦合度。

12. @Value

該註解有兩種使用方式:

a) @Value(「${}」)

這種使用方式注入的是配置文件裡的參數

這樣配置文件中的com.title就能配置到LinkInfoController的title屬性中

b) @Value(「#{}」)

該方式表示SpEl表達式通常用來獲取bean的屬性,或者調用bean的某個方法。

這樣就可以把User對象的name配置到LinkInfoController的name屬性中。

13. @Transactional

用於配置spring事務管理。屬性信息如下:

事物的傳播行為如下:

14. @SpringBootApplication

該註解其實是一個組合註解,源碼如下圖:

比較重要的註解有三個:

a) @SpringBootConfiguration

從原始碼可以看到@SpringBootConfiguration繼承自@Configuration,這兩個註解的功能也是一樣的。

b) @EnableAutoConfiguration

此注釋自動載入應用程式所需的所有Bean。

c) @ComponentScan

該註解會掃描指定路徑下的的類,並將其加入到IoC容器中。在springboot中,@ComponentScan默認掃描@SpringBootApplication所在類的同級目錄以及它的子目錄。

15. @Configuration

從Spring3.0,@Configuration用於定義配置類,可替換xml配置文件,被註解的類內部包含有一個或多個被@Bean註解的方法,這些方法將會被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext類進行掃描,並用於構建bean定義,初始化Spring容器。

16. @Bean

該註解主要用在@Configuration註解的類裡,也可以用在@Component註解的類裡。添加的bean的id為方法名。相當於配置文件裡的<bean></bean>。

@Configuration

public class RedisConfig extends CachingConfigurerSupport{

@Bean

public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {

RedisCacheManager redisCacheManager = RedisCacheManager.create(connectionFactory);

return redisCacheManager;

}

}

如上代碼就相當於在xml文件裡配置:

<beans>

<bean id=" cacheManager "/>

</beans>

17. @MapperScan

指定要變成實現類的接口所在的包,然後包下面的所有接口在編譯之後都會生成相應的實現類添加位置:是在Springboot啟動類上面添加:

18. @EnableCaching

該註解是spring framework中的註解驅動的緩存管理功能。自spring版本3.1起加入了該註解。如果你使用了這個註解,那麼你就不需要在XML文件中配置cache manager了。

@Configuration

@EnableCaching

public class RedisConfig extends CachingConfigurerSupport{

/**

* 採用RedisCacheManager作為緩存管理器

* @param connectionFactory

* @return

*/

@Bean

public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {

RedisCacheManager redisCacheManager = RedisCacheManager.create(connectionFactory);

return redisCacheManager;

}

}

19. @EnableRedisHttpSession

用來設置springboot使用redis存儲session,該註解會創建一個名字叫springSessionRepositoryFilter的Spring Bean,其實就是一個Filter,這個Filter負責用Spring Session來替換原先的默認HttpSession實現。

示例代碼如下:

@Configuration

@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60*30)

public class HttpSessionConfig {

}

其中屬性maxInactiveIntervalInSeconds是設置session的有效時間,單位毫秒,默認1800ms。

但其實這樣還是不夠的,還要在配置文件中設置redis存儲session:

spring.session.store-type=redis

這樣就可以了。

相關焦點

  • Spring boot 基於註解方式配置datasource
    Spring boot 基於註解方式配置datasourceXml配置我們先來回顧下,使用xml配置數據源。boot基於註解方式怎麼配置數據源。先了解這幾個註解之後,我們就可以開始寫代碼了(在文章最後,凱哥會把xml和註解的對應關系列出來,方便大家理解)。
  • Spring SPI和Spring Boot SPI - 第345篇
    (2)在spring.factories文件中可以指定多個key,對於java spi如果多個接口的話,需要配置多個文件。(3)key還可以是註解,比如SpringBoot中的的key:org.springframework.boot.autoconfigure.EnableAutoConfiguration,它就是一個註解。
  • spring boot 整合shiro 錯誤
    最近在弄spring boot 整合shiro的。凱哥現在用的是spring boot。web.xml沒有。但是凱哥配置了shiro的核心攔截器啊。如下圖:並且使用了@Configuration這個註解了。
  • 詳解|Spring Boot 最核心的 3 個註解詳解
    其框架是用來簡化Spring應用的初始搭建和開發過程,即,簡化了框架,便捷了開發。下面開始介紹Spring Boot 最核心的三個註解Configuration在Spring4以後,官方推薦使用 Java Config 來代替 Application.xml 聲明將Bean交給容器管理。
  • Spring Boot 和 Spring 到底有啥區別?
    我們通常使用Spring Test,JUnit,Hamcrest和Mockito庫。在Spring項目中,我們應該將所有這些庫添加為依賴項。但是在Spring Boot中,我們只需要添加spring-boot-starter-test依賴項來自動包含這些庫。Spring Boot為不同的Spring模塊提供了許多依賴項。
  • Spring 和 Spring Boot 之間到底有啥區別?
    ><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.0.6.RELEASE</version></dependency
  • Spring Boot 常見錯誤及解決方法
    錯誤分析: Spring Boot 的正常 jar 包運行方是通過 spring-boot-loader 這個模塊裡的 JarLauncher 完成的,該類內部提供了一套運行的規範。解決方案: 在 pom 裡加上 spring-boot-maven-plugin 的 maven 插件配置 (該插件會在 jar 裡加入 spring-boot-loader 的代碼,並在 MANIFEST.MF 中的 Main-Class 裡寫入 JarLauncher):<plugin
  • Spring Boot中Tomcat、Jetty、Undertow的使用
    Tomcat在我們使用SpringBoot開發WebApi時,會引入spring-boot-starter-web這個starter組件,其自帶了Tomcat容器,所以我們平時新建項目啟動起來,會看見Tomcat相關的一些信息。
  • Spring Boot 的單元測試和集成測試
    學習如何使用本教程中提供的工具,並在 Spring Boot 環境中編寫單元測試和集成測試。1. 概覽 本文中,我們將了解如何編寫單元測試並將其集成在 Spring Boot 環境中。你可在網上找到大量關於這個主題的教程,但很難在一個頁面中找到你需要的所有信息。我經常注意到初級開發人員混淆了單元測試和集成測試的概念,特別是在談到 Spring 生態系統時。
  • Spring 和 Spring Boot 最核心的 3 大區別,詳解!
    <dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId>    <version>2.0.6.RELEASE<
  • 2021 最新版 Spring Boot 速記教程
    開啟 AOP 切面控制切面注入是老生常談的技術,之前學習 Spring 時也有了解,可以參考我之前寫過的文章參考一下:Spring自定義註解實現AOPSpring 源碼學習(八) AOP 使用和實現原理
  • Spring Boot 2.4 手工和 SDKMAN! 安裝 Spring Boot 命令行
    但是 Spring Boot 的官方手冊中有些這方面的內容和介紹,因此我們也在這裡對這部分的內容進行了一些說明。Spring 工具被用來初始化 Spring 項目和一些其他的工作,但 Spring 是基於 Java 的,因此很多東西需要自己配置環境。其實自己配置環境比使用環境配置工具要好一些,能夠讓你了解有關運行的參數和配置。
  • 江帥帥:精通 Spring Boot 系列 03
    具體的配置參數可以參考官網文檔第 10 章 Appendices:https://docs.spring.io/spring-boot/docs/2.2.2.RELEASE/reference/htmlsingle/#common-application-properties4.
  • Spring常用註解類
    Java5.0過後開始支持註解,Spring作為java中的領軍框架,在Spring2.5過後也開始放棄xml配置文件了,更多的推薦註解來使用Spring框架。Spring中那麼多的註解,其中很多可能在工作中很少能遇見,也就用不上。下面就給大家總結一些常用的註解。
  • Spring Boot 2.X 實戰--SQL 資料庫(MyBatis)
    這裡使用 MySQL,如果你想使用如:PostgreSQL 等其他的資料庫,只需要更改相對應的依賴和指定 Driver 驅動包即可。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)為資料庫中的記錄。
  • Spring Boot 單元測試
    單元測試引用:眾所周知,通過spring initialize創建的Spring Boot項目會在Maven中自動攜帶很多starter依賴:其中包含了一個名為spring-boot-starter-test的依賴,本文是圍繞這個依賴展開。
  • Spring Boot中使用Mockito進行Web測試 - 第339篇
    Mockito - 第338篇悟纖:師傅,我上面mock的service層和dao層的例子?       好了進入正題,我們添加web依賴:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId><
  • Spring Boot 啟動事件和監聽器,太強大了!
    毫無疑問,在 Spring Boot 框架中,事件和監聽也得到了發揚光大,除了常用的 Spring Framework 事件(例如:ContextRefreshedEvent)之外,Spring Boot 在啟動過程中還發送一系列其他的應用程式事件。
  • 【保姆級教程】Spring Boot 單元測試
    圖片其中包含了一個名為spring-boot-starter-test的依賴,本文是圍繞這個依賴展開。\2.Spring Boot中引入單元測試很簡單,添加如下依賴(即spring-boot-starter-test依賴):<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-test
  • 一文搞懂如何在Spring Boot 正確中使用JPA
    ;artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId>