1. 程式人生 > >專案中的常用註解

專案中的常用註解

這裡寫圖片描述
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”) 在標記方法的時候指定,若未指定,則使用返回型別的類名稱(首字母小寫)作為屬性名稱。