springmvc 自定義注解


 

1. 自定義一個注解

@Documented //文檔生成時,該注解將被包含在javadoc中,可去掉
@Target(ElementType.METHOD)//目標是方法 
@Retention(RetentionPolicy.RUNTIME) //注解會在class中存在,運行時可通過反射獲取 
@Inherited
public @interface AuthLoginAnnotation {
  /**
     * 檢查是否已登錄(注解的參數
     *

     * @return true-檢查;默認不檢查為false
     */
boolean check() default false; }

  • 注解方法不能有參數。
  • 注解方法的返回類型局限於原始類型,字符串,枚舉,注解,或以上類型構成的數組。
  • 注解方法可以包含默認值。
  • 注解可以包含與其綁定的元注解,元注解為注解提供信息,有四種元注解類型:
 
         

  1. @Documented – 表示使用該注解的元素應被javadoc或類似工具文檔化,它應用於類型聲明,類型聲明的注解會影響客戶端對注解元素的使用。如果一個類型聲明添加了Documented注解,那么它的注解會成為被注解元素的公共API的一部分。

 
         

  2. @Target – 表示支持注解的程序元素的種類,一些可能的值有TYPE, METHOD, CONSTRUCTOR, FIELD等等。如果Target元注解不存在,那么該注解就可以使用在任何程序元素之上。

 
         

  3. @Inherited – 表示一個注解類型會被自動繼承,如果用戶在類聲明的時候查詢注解類型,同時類聲明中也沒有這個類型的注解,那么注解類型會自動查詢該類的父類,這個過程將會不停地重復,直到該類型的注解被找到為止,或是到達類結構的頂層(Object)。

 
         

  4. @Retention – 表示注解類型保留時間的長短,它接收RetentionPolicy參數,可能的值有SOURCE(源文件中起作用), CLASS, 以及RUNTIME(保留到運行時起作用)。

 

 

2. 定義一個相應的攔截器,在springMVC配置文件中進行配置

  攔截器:

  spring為我們提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter這個適配器,繼承此類,可以非常方便的實現自己的攔截器。

       可以根據我們的需要重寫preHandle(預處理)、postHandle后處理(調用了Service並返回ModelAndView,但未進行頁面渲染)afterCompletion返回處理(已經渲染了頁面)

 

public class AuthLoginInteceptor extends HandlerInterceptorAdapter {
    @Autowired
    UserInfoService userInfoService ;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HandlerMethod methodHandler=(HandlerMethod) handler; AuthCheckAnnotation auth=methodHandler.getMethodAnnotation(AuthCheckAnnotation.class);      //如果@AuthLoginAnnotation (check=false) 這里的auth為false,即不用進行攔截驗證,@AuthCheckAnnotation默認為前面定義的true   if(auth!=null&&!auth.check()){ if(!isLogin(request)){
        request.getRequestDispatcher("login.do").forward(request, response);
        return false;

       }
}      return true; } }

 

3. 在springMVC.xml文件中添加攔截器

   <mvc:interceptors>
            <mvc:interceptor>
            <mvc:mapping path="/*.do"  />
            <bean  class="com.k.common.interceptor.AuthLoginInteceptor "/>        
        </mvc:interceptor>
    </mvc:interceptors>

 

4. 在springMVC controller中使用實例

    @AuthLoginAnnotation(check=true)
    @RequestMapping("tomember.do")
    @ResponseBody
    public Object toMember(HttpServletRequest request,HttpServletResponse response){
        .......
        return Ret.toJson(responseBody);
    }

 

 參考一篇ImportNew中簡單講解JAVA注解的文章:http://www.importnew.com/14479.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM