
Java大聯盟
緻力于最高效的Java學習
關注
作者丨Java的小本家
https://m.toutiaocdn.com/i6693736960273416712
@Controller
辨別一個該類是 Spring MVC Controller 處理器,用來建立處理 HTTP 請求的對象。
@RestController Spring4 之後加入的注解,原來在 @Controller 中傳回 json 需要 @ResponseBody 來配合,如果直接用 @RestController 替代 @Controller 就不需要再配置 @ResponseBody,預設傳回 json 格式。
@Service 用于标注業務層元件,說白了就是加入你有一個用注解的方式把這個類注入到 spring 配置中。 @Autowired 用來裝配bean,都可以寫在字段上,或者方法上。 預設情況下必須要求依賴對象必須存在,如果要允許 null 值,可以設定它的 required 屬性為 false,例如:@Autowired(required=false)。 @RequestMapping 類定義處: 提供初步的請求映射資訊,相對于 WEB 應用的根目錄。 方法處: 提供進一步的細分映射資訊,相對于類定義處的 URL。 @RequestParam 用于将請求參數區資料映射到功能處理方法的參數上,例如。
這個id就是要接收從接口傳遞過來的參數id的值的,如果接口傳遞過來的參數名和你接收的不一緻,也可以如下。
其中 course_id 就是接口傳遞的參數,id 就是映射 course_id 的參數名。 @ModelAttribute 使用地方有三種: 1、标記在方法上。 标記在方法上,會在每一個 @RequestMapping 标注的方法前執行,如果有傳回值,則自動将該傳回值加入到 ModelMap 中。 (1) 在有傳回的方法上: 當 ModelAttribute 設定了 value,方法傳回的值會以這個 value 為 key,以參數接受到的值作為 value,存入到 Model 中,如下面的方法執行之後,最終相當于 model.addAttribute("user_name", name);假如 @ModelAttribute 沒有自定義 value,則相當于 model.addAttribute("name", name);
(2) 在沒傳回的方法上: 需要手動 model.add 方法:
我們在目前類下建一個請求方法:
在浏覽器中輸入通路位址并且加上參數: http://localhost:8081/api/test/mod?name=我是小菜&age=12 最終輸出如下:
2、标記在方法的參數上。 标記在方法的參數上,會将用戶端傳遞過來的參數按名稱注入到指定對象中,并且會将這個對象自動加入 ModelMap 中,便于 View 層使用.我們在上面的類中加入一個方法如下。
在浏覽器中輸入通路位址并且加上參數: http://localhost:8081/api/test/mod2?name=我是小菜&age=12 最終輸出:
從結果就能看出,用在方法參數中的 @ModelAttribute 注解,實際上是一種接受參數并且自動放入 Model 對象中,便于使用。 @Cacheable 用來标記緩存查詢。可用用于方法或者類中,當标記在一個方法上時表示該方法是支援緩存的,當标記在一個類上時則表示該類所有的方法都是支援緩存的。 參數清單:
比如 @Cacheable(value="UserCache") 辨別的是當調用了标記了這個注解的方法時,邏輯預設加上從緩存中擷取結果的邏輯,如果緩存中沒有資料,則執行使用者編寫查詢邏輯,查詢成功之後,同時将結果放入緩存中。 但凡說到緩存,都是 key-value 的形式的,是以 key 就是方法中的參數(id),value 就是查詢的結果,而命名空間 UserCache 是在 spring*.xml 中定義。
@CacheEvict 用來标記要清空緩存的方法,當這個方法被調用後,即會清空緩存。@CacheEvict(value=”UserCache”)。 參數清單:
@Resource
@Resource 的作用相當于 @Autowired,隻不過 @Autowired 按 byType 自動注入,而 @Resource 預設按 byName 自動注入罷了。 @Resource 有兩個屬性是比較重要的,分是 name 和 type,Spring 将 @Resource 注解的 name 屬性解析為 bean 的名字,而 type 屬性則解析為 bean 的類型。是以如果使用 name 屬性,則使用 byName 的自動注入政策,而使用 type 屬性時則使用 byType 自動注入政策。如果既不指定 name 也不指定 type 屬性,這時将通過反射機制使用 byName 自動注入政策。 @Resource裝配順序: 1、如果同時指定了 name 和 type,則從 Spring 上下文中找到唯一比對的 bean 進行裝配,找不到則抛出異常。 2、如果指定了 name,則從上下文中查找名稱(id)比對的 bean 進行裝配,找不到則抛出異常。 3、如果指定了 type,則從上下文中找到類型比對的唯一 bean 進行裝配,找不到或者找到多個,都會抛出異常。 4、如果既沒有指定 name,又沒有指定 type,則自動按照 byName 方式進行裝配;如果沒有比對,則回退為一個原始類型進行比對,如果比對則自動裝配。 @PostConstruct 用來标記是在項目啟動的時候執行這個方法。用來修飾一個非靜态的 void() 方法也就是 Spring 容器啟動時就執行,多用于一些全局配置、資料字典之類的加載。被 @PostConstruct 修飾的方法會在伺服器加載 Servlet 的時候運作,并且隻會被伺服器執行一次。PostConstruct 在構造函數之後執行, init() 方法之前執行。PreDestroy() 方法在 destroy() 方法執行執行之後執。 @PreDestroy 被 @PreDestroy 修飾的方法會在伺服器解除安裝 Servlet 的時候運作,并且隻會被伺服器調用一次,類似于 Servlet 的 destroy() 方法。被 @PreDestroy 修飾的方法會在 destroy() 方法之後運作,在 Servlet 被徹底解除安裝之前。 @Repository 用于标注資料通路元件,即 DAO 元件。 @Component 泛指元件,當元件不好歸類的時候,我們可以使用這個注解進行标注。 @Scope 用來配置 spring bean 的作用域,它辨別 bean 的作用域。 預設值是單例: 1、singleton:單例模式,全局有且僅有一個執行個體。 2、prototype:原型模式,每次擷取Bean的時候會有一個新的執行個體。 3、request:request表示該針對每一次HTTP請求都會産生一個新的bean,同時該bean僅在目前HTTP request内有效。 4、session:session作用域表示該針對每一次HTTP請求都會産生一個新的bean,同時該bean僅在目前HTTP session内有效。 5、global session:隻在portal應用中有用,給每一個 global http session 建立一個Bean執行個體。 @SessionAttributes 預設情況下 Spring MVC 将模型中的資料存儲到 request 域中,當一個請求結束後,資料就失效了。如果要跨頁面使用。那麼需要使用到 session,而 @SessionAttributes 注解就可以使得模型中的資料存儲一份到 session 域中。 參數: 1、names:這是一個字元串數組。裡面應寫需要存儲到 session 中資料的名稱。 2、types:根據指定參數的類型,将模型中對應類型的參數存儲到 session 中。 3、value:和 names 是一樣的。
@Required 适用于 bean 屬性 setter 方法,并表示受影響的 bean 屬性必須在 XML 配置檔案在配置時進行填充。否則,容器會抛出一個 BeanInitializationException 異常。 @Qualifier 當你建立多個具有相同類型的 bean 時,并且想要用一個屬性隻為它們其中的一個進行裝配,在這種情況下,你可以使用 @Qualifier 注釋和 @Autowired 注釋通過指定哪一個真正的 bean 将會被裝配來消除混亂。
推薦閱讀
1、一文搞懂什麼是前後端分離
2、Vue+Element UI搭建背景管理界面
3、徒手撸一個MyBatis架構
4、徒手撸一個Spring MVC架構