Javaでよく使われる注釈の使い方の詳細

6752 ワード

Javaでよく使われる注釈の使い方の詳細
  • 注釈
  • とは
  • 常用注記
  • @Controller
  • @Autowired
  • @RequestParam
  • @PostMapping
  • @GetMapping
  • @RequestMapping
  • @ResponseBody
  • @RequestBody
  • @Data
  • @EqualsAndHashCode
  • @Accessor

  • 注釈とは
    Java注釈(Annotation)は、コードに情報を追加するための形式的な方法を提供しています.これらのデータを後で簡単に使用することができます(注釈を解析することでこれらのデータを使用することができます).一般的な役割は以下のとおりです.
  • ドキュメントを生成します.これは最も一般的で、javaが最初に提供した注釈でもあります.よく使われるのは@see@param@returnなど
  • コード依存性を追跡し、代替プロファイル機能を実現します.比較的一般的なのはspring 2.5から始まる注釈ベースの構成です.役割は構成を減らすことです.現在のフレームワークでは、プロファイルの数を減らすために、基本的にこの構成が使用されています.
  • コンパイル時にフォーマットチェックを行います.@Overrideがメソッドの前に置かれている場合、このメソッドがスーパークラスメソッドを上書きしていない場合は、コンパイル時にチェックできます.

  • 注記継承はclassレベルの注記にのみ有効です.
    よく使う注記
    @Controller
  • @Controllerは、クラスにタグ付けするために使用され、タグ付けされたクラスはSpringMVC Controllerオブジェクトです.配布プロセッサは、注釈を使用したクラスのメソッドをスキャンし、@RequestMapping注釈が使用されているかどうかを検出します.
  • @Controllerはコントローラクラスを定義しただけで、@RequestMapping注釈を使用する方法が要求を処理するプロセッサです.

  • @Autowired
    @Autowired:注記springはbeanで参照されているオブジェクトのsetter/getterメソッドを自動的に省略し、set/getを自動的に支援します.
    @RequestParam
  • @RequestParam:パラメータを渡す.
  • @RequestParam:要求パラメータ領域データを機能処理方法のパラメータにマッピングします.
  • @RequestParam注記には、主にどのパラメータがありますか:value:パラメータ名、すなわち、usernameが要求したパラメータ領域の名前がusernameであるパラメータを表す値が入力されます.required:必須かどうか、デフォルトはtrueで、リクエストに対応するパラメータが必要であることを示します.そうしないと、404エラーコードが報告されます.defaultValue:デフォルト値は、要求に同じ名前のパラメータがない場合のデフォルト値を示します.デフォルト値は、「{systemProperties['java.vm.version]}」などのSpEL式です.
  • は、リクエストにusernameという名前のパラメータがないことを示し、デフォルトがnullでない場合は、
  • に注意する必要があります.
    public String queryUserName(@RequestParam(value="userName" ,required =false ) String userName)
    
          :    ,      ,              。
      Boolean      :  Boolean.FALSE,         null。
    
    @RequestParam(value="username", required=true, defaultValue="zhang") String username)   
    
            ,    "zhangsan".
    
    public String requestparam8(@RequestParam(value="userName") String []  userNames)     
       :
    public String requestparam8(@RequestParam(value="list") List list)     
    
               url?userName=zhangsan&userName=wangwu ,
       roleList        “zhangsan,wangwu”,         “,”  ;
                         :
    
  • 例えば
  • @RequestMapping("/testRequestParam")
        @Controller
         public class TestRequestParam {
            private static final String SUCCESS = "success";
            @RequestMapping("/user")
            public String testParam(@RequestParam(value = "name") String name,
                                    @RequestParam(value = "class", required = false, defaultValue = "haha") String cla,
                                    Integer age) {
               System.out.println("name = " + name + " class = " + cla + " age = " + age);
               return SUCCESS;
           }
    
    	   /**
            *   @RequestParam    ,     
            *
            *     :testRequestParam/user?name=xx&age=666 
            *     :name = xx class = haha age = 666
            *
            *     :testRequestParam/user?name=xx&age=888&class=heihei 
            *     :name = xx class = heihei age = 888
            * */
       }
    

    @PostMapping
  • @PostMappingは、@RequestMapping(method=RequestMethod.POST)の略である組合せ注記です.

  • @GetMapping
  • @GetMappingは、@RequestMapping(method=RequestMethod.GET)の略である組合せ注記です.この注記は、HTTP Getを特定の処理方法にマッピングする.

  • @RequestMapping
  • @RequestMapping:要求アドレスマッピングを処理するための注釈であり、クラスまたはメソッドで使用できます.クラスでは、クラス内のすべての応答要求を表す方法が親パスとして使用されます.
  • @RequestMapping注記には6つのプロパティがあります.詳細(ポイント)
  • @RequestMappingリクエスト方式が指定されていない場合、Get、Post、Head、Optionsなどすべてのリクエスト方式が受信されます.

  • @ResponseBody
  • @ResponseBody注記の役割は、controllerメソッドで返されたオブジェクトを適切な変換器で指定されたフォーマットに変換した後、responseオブジェクトのbody領域に書き込み、通常JSONデータまたはXMLデータを返すために使用される.
  • は、この注釈を使用した後、ビュープロセッサを使用するのではなく、入力ストリームに直接データを書き込み、responseオブジェクトを介して指定したフォーマットのデータを出力するのと同じ効果を奏します.
  • 例:
  • @RequestMapping("/login")
      @ResponseBody
      public User login(User user){
        return user;
      }
      
      User  :userName pwd
                  :'{"userName":"xxx","pwd":"xxx"}'
    
               :
      @RequestMapping("/login")
      public void login(User user, HttpServletResponse response){
        response.getWriter.write(JSONObject.fromObject(user).toString());
      }
    

    @RequestBody
  • @RequestBodyは、フロントから送られてきた固定形式のデータ【xml形式またはjsonなど】を対応するJavaBeanオブジェクトにカプセル化し、カプセル化時に使用されるオブジェクトの1つがシステムのデフォルト構成であるHttpMessageConverterで解析されて、パラメータにカプセル化される.
  • 例:
  • @RequestMapping("/login.do")
        @ResponseBody
        public Object login(@RequestBody User loginUuser, HttpSession session) {
            user = userService.checkLogin(loginUser);
            session.setAttribute("user", user);
            return new JsonResult(user);
        }
    

    @Data
  • @Data:クラスに注記し、クラスに読み書き属性を提供するほか、equals()、hashCode()、toString()メソッドも提供します.
  • クラス名に@Data注記を付け、依存:lombok.Dataをインポートします.別のクラスにこのインバウンドクラスを導入した後、activityListParam.によって書かれていないGet,Setなどをポイントアウトできる方法です.

  • @EqualsAndHashCode
  • @EqualsAndHashCode:クラスに注記し、クラスにequals()メソッドとhashCode()メソッドを提供する
  • 継承がある場合は@EqualsAndHashCodeを使用する必要があります.この場合、@Dataのみでは親メソッドを参照できません.callSuper=trueを設定することで、equalsとhashCodeのあなたのスーパークラスで生成されるメソッド(例:@EqualsAndHashCode(callSuper=true))
  • を含めることができます.
    @Accessor
  • Accessorの中国語はアクセサを意味し、@Accessorsはgetterとsetterメソッドの生成結果を構成するために使用され、以下に3つの属性
  • を紹介する.
  • fluent:fluentの中国語の意味はスムーズで、trueに設定すると、getterメソッドとsetterメソッドのメソッド名はいずれもベース属性名であり、setterメソッドは現在のオブジェクトを返します.
  • @Data
    @Accessors(fluent = true)
    public class User {
        private Long id;
        private String name;
        
        //    getter setter    ,    
        public Long id() {}
        public User id(Long id) {}
        public String name() {}
        public User name(String name) {}
    }
    
    
  • chain:chainの中国語の意味はチェーン式で、trueに設定すると、setterメソッドは現在のオブジェクトを返します.
  • @Data
    @Accessors(chain = true)
    public class User {
        private Long id;
        private String name;
        
        //    setter    ,    
        public User setId(Long id) {}
        public User setName(String name) {}
    }
    
    
  • prefix:prefixの中国語の意味は接頭辞であり、getterメソッドとsetterメソッドを生成するためのフィールド名は指定した接頭辞(アルパカの名前に従う)を無視します.
  • @Data
    @Accessors(prefix = "p")
    class User {
    	private Long pId;
    	private String pName;
    	
    	//    getter setter    ,    
    	public Long getId() {}
    	public void setId(Long id) {}
    	public String getName() {}
    	public void setName(String name) {}
    }