天天看點

java注解(二)Annotation使用案例

Annotations僅僅是中繼資料,和業務邏輯無關。如果Annotations不包含業務邏輯,那麼必須有人來實作這些邏輯。中繼資料的使用者來做這個事情。Annotations僅僅提供它定義的屬性(類/方法/包/域)的資訊。Annotations的使用者(同樣是一些代碼)來讀取這些資訊并實作必要的邏輯

以Rest請求為例

1、 建立一個注解:請求必須先登入

@Target({ ElementType.TYPE,ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginValidate {
 
         /**
          * 辨別被調用的類,方法是否需要登入才能通路,false:不需要登入即可通路,true:需要登入才可方法,
          *
          * @return
          */
         booleanlogin() default true;
}</span>
           

2、在業務類上,使用注解

@Component
@Path("/test")
@Produces(value = MediaTypes.JSON_UTF_8)
public class TestController {
         @POST
   @Path("/test")
   @LoginValidate
   public Object test(@FormParam("passport") String passport) {
                          //做一些增删改查
         }
}
           

3、 發起請求時,過濾器判斷注解

@Component
public class LoginValidateRequestFilterimplements ContainerRequestFilter {
         @Override
         @SuppressWarnings("rawtypes")
         publicvoid filter(ContainerRequestContext requestContext) throws IOException {
                  UriInfoui = requestContext.getUriInfo();
                  ResourceInfori = (ResourceInfo) ui;
                  Classclazz = ri.getResourceClass();
                  if(clazz == null) {
                          logger.error("RequestResourceClass not found!");
                          return;
                  }
                  LoginValidatevalidate = AnnotationUtils.findAnnotation(clazz, LoginValidate.class);
                  if(validate !=null && validate.login() == true) {
                          //判斷是否登入
                  }
         }
}