專案中的常用註解
1、@SuppressWarnings
作用:用於抑制編譯器產生告警
用法:@SuppressWarnings(“unchecked”)、@SuppressWarnings(“static-access”)等
2、@Autowired
作用:完成自動裝配,可以作用於類成員變數、方法及建構函式上。
用法:當掃描到@Autowired時,會自動在容器中查詢對應的bean,並裝配給該物件的屬性。
如何讓容器找到對應的bean呢?有這樣幾種方法:
1)在spring的配置檔案中宣告bean,可以被spring找到。
<bean id="noShardedRedisCacheUtil" class="com.maiyajf.base.redis.utils.NoShardedRedisCacheUtil">
<property name="jedisClient" ref="jedisClient" />
</bean>
2)用@Component、@Controller、@Service、@Reposity等註解,同時在spring配置檔案中加入掃描路徑,被這幾個註解修飾的bean會被容器掃描到。
<context:component-scan base-package="com.maiya.mobile" >
</context:component-scan>
3、@Resource
作用:與@Autowired一樣,可以實現自動裝配
也有不一樣的地方,@Autowired是根據型別(byType)來注入的,如果有重寫,就不好用@Autowired了。@Resource提供了byType和byName兩種方式,如果有重寫,可以根據name進行區分。
4、@Component、@Controller、@Service、@Reposity
@Component泛指元件,當元件不好歸類的時候,我們可以使用這個註解進行標註。
@Controller用於標註控制層元件
@Service用於標註業務層元件
@Repository用於標註資料訪問元件,即DAO元件
@Repository在專案中基本沒有使用,因為通過這樣的配置就無需寫註解就能掃描到
<!-- DAO介面所在包名,Spring會自動查詢其下的類 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage"
value="com.maiyajf.loan.*.dao,com.maiyajf.base.utils.sequence" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryOracle"></property>
</bean>
5、@Override
作用:表示重寫,增強可讀性。如實現介面時,加上這個註解。
6、@Value
作用:從配置檔案中讀取引數,例:@Value("${push_cs_whiteList}")
需要在spring配置檔案中配置
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/config/application.properties</value>
<value>classpath:/config/db.properties</value>
</list>
</property>
</bean>
7、@RequestMapping
RequestMapping是一個用來處理請求地址對映的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。
RequestMapping註解有六個屬性:
1)、 value, method;
value: 指定請求的實際地址,指定的地址可以是URI Template 模式(後面將會說明);
method: 指定請求的method型別, GET、POST、PUT、DELETE等;
2)、consumes,produces
consumes: 指定處理請求的提交內容型別(Content-Type),例如application/json, text/html;
produces: 指定返回的內容型別,僅當request請求頭中的(Accept)型別中包含該指定型別才返回;
3)、params,headers
params: 指定request中必須包含某些引數值是,才讓該方法處理。
headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求。
8、@PathVariable
作用:用來獲得請求url中的動態引數
9、@RequestBody
作用:POST或者PUT的資料是JSON格式的字串或者XML格式,而不是普通的鍵值對形式。傳送請求時,要設定contentType,contentType:”application/json,明確的告訴伺服器傳送的內容是json。由於Spring中使用的json轉換用到的是jackson,所以需要引入jackson包。
@RequestMapping("/update")
@ResponseBody
public ServiceResult<String> update(@RequestBody PermissionDto record, Model model) {
record.setCreateUser(ShiroUtils.getCurrentUserName());
ServiceResult<String> result = permissionService.edit(record);
return result;
}
10、@ResponseBody
作用:返回的資料不是html標籤的頁面,而是其他某種格式的資料時(如json、xml等)使用。例如ajax請求時。
@RequestMapping("/checkActivityInfo")
@ResponseBody
public AjaxResult checkEmployeeInfo(ActivityDto dto) {
ServiceResult<Integer> result = activityService.checkEmployeeInfo(dto);
return AjaxResult.success((Object) result.getData());
}
11、@requestParam
作用:常用來處理簡單型別的繫結
@Controller
@RequestMapping("/pets")
@SessionAttributes("pet")
public class EditPetForm {
// ...
@RequestMapping(method = RequestMethod.GET)
public String setupForm(@RequestParam("petId") int petId, ModelMap model) {
Pet pet = this.clinic.loadPet(petId);
model.addAttribute("pet", pet);
return "petForm";
}
// ...
12、@RequestHeader
作用:從Http請求頭中提取指定的某個請求頭.等價於HttpServletRequest.getHeader(String)
13、@CookieValue
作用:從Http請求頭中的Cookie提取指定的某個Cookie
14、@Path
作用:rest風格的介面上需要加上此註釋,可以寫在類或方法上。
15、@PathParam
作用:rest風格的介面上獲取引數,用於動態引數。
16、@queryparam
作用:rest風格的介面上獲取引數,用於普通引數。
17、@Produces
作用:rest風格的介面註釋代表的是一個資源可以返回的 MIME 型別。
18、@Consumes
作用:rest風格的介面註釋代表的是一個資源可以接受的 MIME 型別。
19、 @Aspect
作用是把當前類標識為一個切面供容器讀取
20、 @Before
標識一個前置增強方法,相當於BeforeAdvice的功能,相似功能的還有
21、 @AfterReturning
後置增強,相當於AfterReturningAdvice,方法正常退出時執行
22、 @AfterThrowing
異常丟擲增強,相當於ThrowsAdvice
23、 @After
final增強,不管是丟擲異常或者正常退出都會執行
24、 @Around
環繞增強,相當於MethodInterceptor
25、 @DeclareParents
引介增強,相當於IntroductionInterceptor
26、@Param
作用:這是ibatis的註解,可以用來修飾引數,作為sql的引數。需要注意的是,如果使用@Param,引數可以是多個,並且sql可以使用#{}方式也可以使用 ${}方式。如果不加@Param,引數只能是一個,並且是javaBean,並且引數不可寫成 ${}方式。
27、@Lazy
作用:spring預設會在容器啟動的時候初始化類,當用@Lazy修飾時,就會延遲到第一次使用時再載入。避免在啟動的時候依賴的bean還未建立而產生啟動錯誤。
28、@Async
作用:註解在類上,表示這個類中的所有方法都是非同步的。註解在方法上,表示這個方法是非同步的,如果類也註解了,則以這個方法的註解為準。
相關的配置:
<task:annotation-driven />
配置:
executor:指定一個預設的executor給@Async使用。
<task:executor />
配置引數:
id:當配置多個executor時,被@Async(“id”)指定使用;也被作為執行緒名的字首。
pool-size:
core size:最小的執行緒數,預設:1
max size:最大的執行緒數,預設:Integer.MAX_VALUE
queue-capacity:當最小的執行緒數已經被佔用滿後,新的任務會被放進queue裡面,當這個queue的capacity也被佔滿之後,pool裡面會建立新執行緒處理這個任務,直到匯流排程數達到了max size,這時系統會拒絕這個任務並丟擲TaskRejectedException異常(預設配置的情況下,可以通過rejection-policy來決定如何處理這種情況)。預設值為:Integer.MAX_VALUE
keep-alive:超過core size的那些執行緒,任務完成後,再經過這個時長(秒)會被結束掉
rejection-policy:當pool已經達到max size的時候,如何處理新任務
ABORT(預設):丟擲TaskRejectedException異常,然後不執行
DISCARD:不執行,也不丟擲異常
DISCARD_OLDEST:丟棄queue中最舊的那個任務
CALLER_RUNS:不在新執行緒中執行任務,而是有呼叫者所在的執行緒來執行
配置例子:
<task:annotation-driven executor="asyncExecutor" />
<task:executor id="asyncExecutor" pool-size="100-10000" queue-capacity="10"/>
例項:
<!-- 預設的非同步任務執行緒池 -->
<task:annotation-driven executor="asyncExecutor" />
<task:executor id="asyncExecutor" pool-size="100-10000" queue-capacity="10" />
<!-- 處理log的執行緒池 -->
<task:executor id="logExecutor" pool-size="15-1000" queue-capacity="5" keep-alive="5"/>
@Override
@Async("logExecutor") //如果不指定名字,會使用預設的“asyncExecutor”
public void saveUserOpLog(TabUserOpLog tabUserOpLog) {
userOpLogDAO.insertTabUserOpLog(tabUserOpLog);
}
29、@ModelAttribute
作用:
1)當 @ModelAttribute 標記在處理器方法引數上的時候,表示該引數的值將從模型或者 Session 中取對應名稱的屬性值,該名稱可以通過 @ModelAttribute(“attributeName”) 來指定,若未指定,則使用引數型別的類名稱(首字母小寫)作為屬性名稱。
2)當 @ModelAttribute 標記在方法上的時候,該方法將在處理器方法執行之前執行,然後把返回的物件存放在model屬性中,屬性名稱可以使用 @ModelAttribute(“attributeName”) 在標記方法的時候指定,若未指定,則使用返回型別的類名稱(首字母小寫)作為屬性名稱。
30、@SessionAttributes
作用:當 @SessionAttributes標記在方法上的時候,該方法將在處理器方法執行之前執行,然後把返回的物件存放在session屬性中,屬性名稱可以使用 @SessionAttributes(“attributeName”) 在標記方法的時候指定,若未指定,則使用返回型別的類名稱(首字母小寫)作為屬性名稱。