spring家族常用註解

類解耦

  1. 通過反射來創建對象,避免通過new關鍵字

  2. 讀取配置文件來獲取要創建的對象的全限定類名(唯一標誌)

結構

  1. 持久層

    • 持久層接口

    • 持久層實現

  2. 業務層

    • 業務層接口

    • 業務層實現

持久層調用jdbc,業務層調用持久層,表現層調用業務層,會存在類相互依賴的情況,需要解耦

編譯期依賴:沒有某個類,不能正常編譯

實際開發應做到,編譯期不依賴,運行時依賴

spring的IOC容器是Map結構,一個id對應一個object

spring boot

參考筆記

註解

 

 

 

註解只有一個屬性,且屬性名是value,則value可以不寫

springboot

  1. @SpringBootApplication:Spring Boot Application的入口點是包含@SpringBootApplication註釋的類。@SpringBootApplication批註添加到類中,則無需添加@EnableAutoConfiguration@ComponentScan@SpringBootConfiguration

spring

@Autowired

作用:自動按照類型注入,只要容器中有唯一的bean對象類型和要注入的變量類型匹配,就可以注入成功,在ioc容器中不考慮id,直接查找object的類名

出現位置:可以在變量上,也可以在方法上,

匹配過程:先尋找類名一致的,在類名一致的前提下,查看bean的id是否有和要注入變量的名字一樣的,若有,則注入,否則報錯。

@Bean

作用:用於把當前方法的返回值作爲bean對象存入spring的ioc容器中,默認是單例的,

屬性:

  • name:用於指定bean的id,默認值當前方法的名稱

 @Bean
 @Scope('prototype')
 private xxxx xxxx() {}

 

@Component

在持久層、業務層和控制層中,分別採用@Repository(持久層)、@Service(業務層)和@Controller(表現層)對分層中的類進行命名,而用@Component對那些比較中立的類進行命名。

作用:將當前類存放到spring容器中

屬性:

  • value: 用於指定bean的id,默認類名(首字母變小寫)

 // 以下3中情況都相同
 @Component(value='xxx')
 ​
 @Component('xxx')
 ​
 @Component
 public class Xxx {}

@ComponentScan

作用:用於通過註解指定spring在創建容器時要掃描的包

屬性:

  • value:等同於basePackages

  • basePackages:等同於value

 @Component(value="xxx.xxx")
 @Component("xxx.xxx")

@Configuration

作用:指定當前類是一個配置類

@Import

作用:允許從另一個配置類中加載 @Bean 定義

 @Configuration
 @Import(ConfigA.class)

 

@PostConstruct

作用:初始化執行方法,用於@Component之類的方法上

@PreDestroy

作用:銷燬方法,多例spring不負責銷燬方法,只有單例負責,用於@Component之類的方法上

@PropertySource

作用:用於指定properties文件的位置

 @PropertySource("classpath:jdbc.properties")

 

屬性:

  • value:指定文件的名稱和路徑

@Qualifier

作用:按照類型注入的基礎上再按照名稱注入,給類成員注入時不能單獨使用,但是在給方法參數注入時可以。

屬性:

  • value:用於指定bean的id

@Scope

作用:用於指定bean的作用範圍

屬性:

  • value:常用取值:singleton(單例) | prototype(多例) (默認單例)

@Value

作用:用於注入基本類型和String類型的數據

屬性:

  • value:用於指定數據的值,也可以使用spring的el表達式

spring mvc

@RequestMapping

  1. value

  2. method

  3. consumes

  4. produces

  5. params

  6. headers

 @RequestMapping("/test") // test 即爲value值
 @RequestMapping(value="/test/{id}", method=RequestMethon.GTET) // 處理動態URI
 String getDynamicUriValue(@PathVariable String id) { // id值可以在這個得到
     System.out.println("ID is " + id);
     return "Dynamic URI parameter fetched";
  }
 ​
 @RequestMapping(method = RequestMethod.POST) // 處理所有post請求
 @RequestMapping()  // 處理所有請求
 String default() {}
 ​
 @RestController
 @RequestMapping("/home") //單個屬性可以省略value
 public class IndexController { 
     @RequestMapping(value = "/prod", produces = {
         "application/JSON"
     }) // 返回消息是json類型
     @ResponseBody
     String getProduces() {
         return "Produces attribute";
     }
 ​
     @RequestMapping(value = "/cons", consumes = {
         "application/JSON",
         "application/XML"
     }) // 接受消息是json和xml類型,{} 指定多個消息頭
     String getConsumes() {
         return "Consumes attribute";
     }
 }

@RequestParam

作用: 處理?key=value1&key2=value2

 @RequestMapping("/user")
 public String getUserBlog(@RequestParam("id") int blogId) {
         return "blogId = " + blogId;
 }
 ​
 @RequestParam Map<String,Object> params
 // 這樣當我們訪問/user?id=123時,Spring MVC幫助我們將Request參數id的值綁定到了處理函數的參數blogId上。這樣就能夠輕鬆獲取用戶輸入,並根據它的值進行計算並返回了。

相信大家可能注意到了,@RequestParam@PathVariable都能夠完成類似的功能——因爲本質上,它們都是用戶的輸入,只不過輸入的部分不同,一個在URL路徑部分,另一個在參數部分。要訪問一篇博客文章,這兩種URL設計都是可以的:

  • 通過@PathVariable,例如/blogs/1

  • 通過@RequestParam,例如blogs?blogId=1

那麼究竟應該選擇哪一種呢?建議:

  1. 當URL指向的是某一具體業務資源(或者資源列表),例如博客,用戶時,使用@PathVariable

  2. 當URL需要對資源或者資源列表進行過濾,篩選時,用@RequestParam

例如我們會這樣設計URL:

  • /blogs/{blogId}

  • /blogs?state=publish而不是/blogs/state/publish來表示處於發佈狀態的博客文章

更多用法

一旦我們在方法中定義了@RequestParam變量,如果訪問的URL中不帶有相應的參數,就會拋出異常——這是顯然的,Spring嘗試幫我們進行綁定,然而沒有成功。但有的時候,參數確實不一定永遠都存在,這是我們可以通過定義required屬性:

 @RequestParam(name="id",required=false) // 默認是true,也就是必須傳這個參數
 // 當然,在參數不存在的情況下,可能希望變量有一個默認值:
 @RequestParam(name="id",required=false,defaultValue="0")

 

@RequestBody

如果把 json 作爲參數傳遞,我們可以使用 @requestbody 接收參數,將數據轉換 Map

@PathVariable

是用來獲得請求url中的動態參數的

 

@RequestHeader

@CookieValue

@ModelAttribute

@SessionAttribute

綁定

get

前臺傳的參數要和後臺@RequestMapping綁定方法的參數名一致, 也可以將所有參數封裝到一個對象account中,如果有嵌套user,前臺的name要使用user.xxx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章