> ### `@Component`
* 作用在類上,默認為`singleton`
* 被`@Component`注解標注的類會被Spring掃描并注冊為`Bean`
* `@Component`使用在不確定哪一個層的時候使用,可以作用在任何層次,把普通`pojo`實例化到`spring`容器
<br/>
> ### `@Service`
* `@Service`是`@Component`注解的一個特例,作用在類上,默認為`singleton`
* `@Service`用于標注業務層組件,表示定義一個`bean`
<br/>
> ### `@Scope`
* `@Scope`作用在類上和方法上,用來配置 `spring bean` 的作用域
* `singleton`單例模式
* `prototype`原型模式
* `request`模式,只適用于Web程序,每一次HTTP請求都會產生一個新的bean
* `session`模式,只適用于Web程序,session作用域表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP session內有效
<br/>
> ### `@Repository`
* `@Repository`注解作用在類上,默認為singleton,用于標注數據訪問組件,即DAO組件
* `@Repository`注解的作用不只是將類識別為Bean,同時它還能將所標注的類中拋出的數據訪問異常封裝為 Spring 的數據訪問異常類型
<br/>
> ### `@Controller`
* `@Controller`注解作用在類上,用于標注Web中控制層組件
* 被`@Controller`標注的類負責處理由`DispatcherServlet`分發的請求,它把用戶請求的數據經過業務處理層處理之后封裝成一個`Model `,然后再把該`Model`返回給對應的`View`進行展示
* `@Controller`和`@RequestMapping`、`@RequestParam`等一些注解共同處理URL的映射
<br/>
> ### `@RequestMapping`
* `@RequestMapping`注解作用在類或方法上,用來處理請求地址映射,有7個屬性
* `value`和`path`熟悉指定請求的實際地址,如:`@RequestMapping("/test")`,`@RequestMapping(path="/test/*.do")`
* `method`屬性,表示請求類型:` GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE`,另外,Spring Boot也提供了簡化版后的`@RequestMapping`,如`@GetMapping`,`@PostMapping`
* `consumes`,指定處理允許的媒體類型,例如`application/json`, `text/html`
* `produces`,指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回
```
// 僅處理request請求中Accept頭中包含了"text/plain"的請求,同時暗示了返回的內容類型為text/plain
@RequestMapping(value="/test", products="text/plain")
@RequestMapping(value="/test", produces={"text/plain", "application/*"})
```
* `params`,指定request中必須包含的請求參數,才會進入此方法
```
// 僅處理請求中包含了名為“action”,值為“query”的請求
@RequestMapping(value = "/test", params="action=query")
```
* `headers`,指定請求中必須包含的請求頭,才能進入此方法
* `@RequestMapping`請求路徑匹配
* 符號 * 匹配任一字符
* 符號 ** 匹配任意路徑
* 符號 ? 匹配單個字符
* 如果一個請求有多個@Requestmapping能夠匹配,通過匹配更具體的方法處理此請求
* `@RequestMapping`方法參數
* @PathVariable - 將URL中的值映射到方法參數中
* Model - Spring MVC中通用的模型
* JavaBean - 將HTTP參數映射到JavaBean對象
* MultipartFile - 用于處理文件上傳
<br/>
> ### `@ResponseBody`
* `@ResponseBody`注解直接將返回的對象輸出到客戶端
* 如果返回字符串,直接返回;如果返回不是字符串,默認使用Jackson將對象序列化成JSON字符串后輸出
<br/>
> ### `@RestController`
* `@RestController = @Controller + @ResponseBody`,直接將返回的對象輸出到客戶端
<br/>
> ### `@AutoWired`
* `byType`方式,自動注入`bean`,當加上(`required=false`)時,就算找不到bean也不報錯
* `@Qualifier`,配合`@AutoWired`使用,當`bean`有多個實現類時,可用該注解指定其中的一個,如:`@Qualifier("apple")`
<br/>
> ### `@Transactional `
* 在應用系統調用聲明了`@Transactional`的目標方法時,`Spring Framework`默認使用 AOP 代理,在代碼運行時生成一個代理對象,根據`@Transactional`的屬性配置信息,這個代理對象決定該聲明`@Transactional`的目標方法是否由攔截器`TransactionInterceptor`來使用攔截,在`TransactionInterceptor`攔截時,會在目標方法開始執行之前創建并加入事務,并執行目標方法的邏輯, 最后根據執行情況是否出現異常,利用抽象事務管理器`AbstractPlatformTransactionManager`操作數據源`DataSource`提交或回滾事務。
* `readOnly`,否為只讀事務,設置為true表示只讀,false則表示可讀寫,默認值為false
* `propagation`,設置事務的傳播行為
* `isolation`,設置底層數據庫的事務隔離級別
* `timeout`,設置事務的超時秒數,默認值為-1表示永不超時
* `rollbackFor`,需要進行回滾的異常類數組,當方法中拋出指定異常數組中的異常時,則進行事務回滾。
* `rollbackForClassName`,設置需要進行回滾的異常類名稱數組,當方法中拋出指定異常名稱數組中的異常時,則進行事務回滾。
* `noRollbackFor`,設置不需要進行回滾的異常類數組
* `noRollbackForClassName`,設置不需要進行回滾的異常類名稱數組
- asD
- Java
- Java基礎
- Java編譯器
- 反射
- collection
- IO
- JDK
- HashMap
- ConcurrentHashMap
- LinkedHashMap
- TreeMap
- 阻塞隊列
- java語法
- String.format()
- JVM
- JVM內存、對象、類
- JVM GC
- JVM監控
- 多線程
- 基礎概念
- volatile
- synchronized
- wait_notify
- join
- lock
- ThreadLocal
- AQS
- 線程池
- Spring
- IOC
- 特性介紹
- getBean()
- creatBean()
- createBeanInstance()
- populateBean()
- AOP
- 基本概念
- Spring處理請求的過程
- 注解
- 微服務
- 服務注冊與發現
- etcd
- zk
- 大數據
- Java_spark
- 基礎知識
- Thrift
- hdfs
- 計算機網絡
- OSI七層模型
- HTTP
- SSL
- 數據庫
- Redis
- mysql
- mybatis
- sql
- 容器
- docker
- k8s
- nginx
- tomcat
- 數據結構/算法
- 排序算法
- 快排
- 插入排序
- 歸并排序
- 堆排序
- 計算時間復雜度
- leetcode
- LRU緩存
- B/B+ 樹
- 跳躍表
- 設計模式
- 單例模式
- 裝飾者模式
- 工廠模式
- 運維
- git
- 前端
- thymeleaf
- 其他
- 代碼規范
- work_project
- Interview