Spring Bootよくある注釈


一、Spring Web MVCコメント
1.1@Request Mapping
@Request Mapping注釈の主な用途は、Web要求と要求処理クラスにおける方法をマッピングすることである。SpringMVCはRequest MappingHandlerMappingとRequest MappingHandlerAdapterの2つのクラスを通じて@Request Mappingに対する注釈のサポートを提供します。Request Mapping注は要求処理類における処理方法を表示します。@Request Mapping注は以下の6つの構成の特性を持っています。
  • value:マッピングの要求URLまたは他の別名
  • method:HTTP対応の方法名
  • params:HTTPパラメータの存在、デフォルトまたは値に基づいて要求を処理する
  • header:HTTP Headerの存在、デフォルトまたは値に基づいて要求をフィルタリングする
  • consume:HTTP要求本文で使用可能なメディアタイプを設定する
  • product:HTTP応答体で使用可能なメディアタイプ
  • 注意:@Request Mappingを使用する前に、処理を要求するクラスに@Controllerまたは@RertControllerを使用します。
    @RestController
    public class TestController {
    
        @RequestMapping(value = "/demo/test", method = RequestMethod.POST)
        public String test() {
            return "/test";
        }
    }
    
    @RestController
    @RequestMapping(value = "/demo")
    public class TestController {
    
        @RequestMapping(value = "/test", method = RequestMethod.POST)
        public String test() {
            return "/test";
        }
    }
    
    1.2@RequestBody
    @Request Bodyは、処理要求方法のパラメータリストで使用され、要求パラメータを一つのオブジェクトに結び付けることができ、要求本体パラメータはHttpMessage Coverterを介して伝達され、要求本体のパラメータ名に基づいてオブジェクトの属性名と一致して結合される値である。また、要求主体におけるパラメータは、@Valid注釈によって検証することもできる。
    @RestController
    @RequestMapping(value = "/order")
    public class TestController {
    
        @Autowired
        private OrderService orderService;
    
        @PostMapping("/create")
        public OrderDTO createOrder(@Valid @RequestBody OrderDTO orderDTO){
            return orderService.create(orderDTO);
        }
    }
    
    1.3@GetMapping
    @GetMappingはHTTP GET要求を処理するために注解し、要求を具体的な処理方法にマッピングする。具体的には、@GetMappingは組み合わせの注釈であり、それはかなり@Request Mapping(method=Request Method.GET)です。
    @GetMappingの使用例:
    @RestController
    @RequestMapping(value = "/order")
    public class TestController {
    
        @Autowired
        private OrderService orderService;
    
        @GetMapping("/find/{id}")
        public OrderDTO findOneById(@PathVariable(name = "id") String id){
            return orderService.findOne(id);
        }
    }
    
    1.4@PutMapping
    @PutMappingはHTTP PUT要求を処理するために注解し、要求を具体的な処理方法にマッピングする。具体的には、@PutMappingは組み合わせの注釈で、それはかなり@Request Mapping(method=Request Method.PUT)です。
    @PutMappingの使用例:
    @RestController
    @RequestMapping(value = "/order")
    public class TestController {
        @Autowired
        private OrderService orderService;
    
        @PutMapping("/paid/{id}")
        public OrderDTO paid(@PathVariable(name = "id") String id){
            OrderDTO orderDTO = orderService.findOne(id);
            return orderService.paid(orderDTO);
        }
    }
    
    1.5@PostMapping
    @PostMappingはHTTP POST要求を処理するために注釈し、要求を具体的な処理方法にマッピングする。具体的には@PostMappingという組み合わせの注釈ですが、それはかなり@Request Mapping(method=Request Method.POST)です。
    @PostMappingの使用例:
    @RestController
    @RequestMapping(value = "/order")
    public class TestController {
    
        @Autowired
        private OrderService orderService;
    
        @PostMapping("/orders")
        public OrderDTO cancelOrder(@Valid @RequestBody OrderDTO orderDTO){
            return orderService.cancel(orderDTO);
        }
    }
    
    1.6@DeleteMapping
    @DeleteMappingはHTTP DELETE要求を処理するために注釈し、要求を具体的な処理方法にマッピングする。具体的には@DeleteMappingという組み合わせの注釈があり、それはかなり@Request Mapping(method=Request Method.DELETE)です。
    @DeleteMappingの使用例:
    @RestController
    @RequestMapping(value = "/order")
    public class TestController {
    
        @Autowired
        private OrderService orderService;
    
        @DeleteMapping("/cancel/{id}")
        public OrderDTO cancelOrder(@PathVariable(name = "id") String id){
            OrderDTO orderDTO = orderService.findOne(id);
            return orderService.cancel(orderDTO);
        }
    }
    
    1.7@Patch Mapping
    @Patch MappingはHTTP PATCH要求を処理するために注解し、要求を具体的な処理方法にマッピングする。具体的には、@patMappingは組み合わせの注釈で、それはかなり@Request Mapping(method=Request Method.PATCH)です。
    @Patch Mappingの使用例:
    @RestController
    @RequestMapping(value = "/order")
    public class TestController {
        @PatchMapping("/orders/patch")
        public ResponseEntity<Object> patch(){
            return new ResponseEntity<>("Patch method response message", HttpStatus.OK);
        }
    }
    
    1.8@ResonseBody
    @ResonseBodyは、Controller層のメソッドの戻り値をHTTP応答に書き込みます。@ReponseBodyは@Controllerの注釈表記の種類にしか使えません。@RestitControllerによって表記されているクラスの中であれば、@ResponseBodyコメントは必要ありません。RetsController相当于@Controller和@ResponseBody的组合注解。
    @ResonseBodyの使用例:
    @Controller
    @RequestMapping(value = "/order")
    public class TestController {
        @Autowired
        private OrderService orderService;
        
        @ResponseBody
        @PutMapping("/orders/{id}")
        public OrderDTO findById(@PathVariable(name = "id") String id){
            return orderService.findOne(id);
        }
    }
    
    1.9@PathVarable
    @PathVarable注解は、方法中のパラメータを要求URIのテンプレート変数に結びつけることである。@Request Mapping注解によりURIのテンプレート変数を指定し、@PathVarable注解を使って方法中のパラメータをテンプレートに結びつけることができます。@PathVarable注解により、valueまたはname属性を使ってパラメータに別名を取ることができます。@PathVarableの使用例:
    @Controller
    @RequestMapping(value = "/order")
    public class TestController {
        @Autowired
        private OrderService orderService;
    
        @ResponseBody
        @PutMapping("/orders/{id}")
        public OrderDTO findById(@PathVariable(name = "id") String id){
            return orderService.findOne(id);
        }
    }
    
    テンプレート変数名は「{}」を用いて小包を行う必要がありますが、方法のパラメータ名がURIテンプレート変数名と一致する場合、@PathVarableでは別名の定義を省略することができます。簡単な例:
    @Controller
    @RequestMapping(value = "/order")
    public class TestController {
        @Autowired
        private OrderService orderService;
    
        @ResponseBody
        @PutMapping("/orders/{id}")
        public OrderDTO findById(@PathVariable String id){
            return orderService.findOne(id);
        }
    }
    
    : , , @PathVariable require = false, true1.10@RequestParam
    @Request Paramは、方法のパラメータをウェブ要求の伝達のパラメータと結びつけるために注釈している。@Request Paramを使って簡単にHTTP要求パラメータの値を取得できます。@Request Paramの使用例:
    @Controller
    @RequestMapping(value = "/order")
    public class TestController {
        @Autowired
        private OrderService orderService;
    
        @ResponseBody
        @PutMapping("/orders/{id}")
        public OrderDTO findById(@RequestParam(name = "id") String id ){
            return orderService.findOne(id);
        }
    }
    
    @Request Paam注解の他の属性構成は@PathVarableの構成と同じで、特に伝達パラメータが空であれば、defaultValueでデフォルト値を設定することもできます。サンプルコードは以下の通りです。
    @Controller
    @RequestMapping(value = "/order")
    public class TestController {
        @Autowired
        private OrderService orderService;
    
        @ResponseBody
        @GetMapping
        public OrderDTO findById(@RequestParam(name = "id", defaultValue = "1") String id ){
            return orderService.findOne(id);
        }
    }
    
    1.11@Controller
    @Controllerは@Componentの注釈の延長の一つで、Springは自動的にスキャンして、この注釈で表示されるクラスを配置します。この注はSpring MVCのコントローラを表示します。@Controllerの使用例:
    @Controller
    @RequestMapping(value = "/order")
    public class TestController {
        @Autowired
        private OrderService orderService;
    
        @ResponseBody
        @PutMapping("/orders/{id}")
        public OrderDTO findById(@RequestParam(name = "id", defaultValue = "1") String id ){
            return orderService.findOne(id);
        }
    }
    
    1.12@RertController
    @RestitControllerはSpring 4.0から導入を開始しました。これは特定のコントローラの注釈です。この注釈は、@Controllerと@ResponseBodyのショートカットに相当する組み合わせの注釈です。この注釈を使う時は、@ResponseBodyの注釈をメソッドに使う必要はありません。@RestitControllerの使用例:
            
    
    @RestController
    @RequestMapping(value = "/order")
    public class TestController {
        @Autowired
        private OrderService orderService;
    
        @PutMapping("/orders/{id}")
        public OrderDTO findById(@RequestParam(name = "id", defaultValue = "1") String id ){
            return orderService.findOne(id);
        }
    }
    
    2、Spring Bern注释
    2.1@ComponentScan
    @ComponentScanは、Springをスキャンする必要があるコンポーネント注釈のクラスがあるパケットを構成するために使用され、そのbasePackages属性またはvalue属性を設定することによって、スキャンする必要があるパケットパスを配置することができる。value属性はbasePackagesの別名です。@ComponentScanの使用例:
    @Configuration
    @ComponentScan(basePackages = "com.henya.config")
    public class TestConfig {
        // ...
    }
    
    2.2@Component
    @Componentは普通のコンポーネント類を表示するために使用しています。明確な業務範囲はありません。Springにこの注釈で表示されているクラスはSpring Bean容器に入れて管理する必要があるということを知らせるだけです。Componentの使用例:
    @Component
    public class TestConfig {
    
        public void testComponent(){
            // ...
        }
    }
    
    2.3@サービス
    @Serviceコメントは@Componentの延長(特例)であり、業務ロジック類を表示するために使用されます。@Component注解と同じように、この注で表示されているクラスは、自動的にSpringで管理されます。Serviceの使用例:
    @Service
    public class ProductServiceImpl implements ProductService {
    
        @Autowired
        private ProductInfoDao productInfoDao;
    
        @Override
        public ProductInfo findOne(String productId) {
            return productInfoDao.findOne(productId);
        }
    }
    
    2.4@Repository
    @Repository注释は@Component注解の延長であり、@Component注释と同じように、この注释で表示されているクラスはSpring容器に管理され、@RepositoryはDAO層を表示するためのデータの耐久化類を注释しています。@Repositoryの使用例:
    @Repository
    public interface TestRepository extends JpaRepository<OrderDTO, String> {
        // ...
    }
    
    3、容器配置コメント
    3.1@Autowired
    @Autowired Springの解析と注入の依存項をマーキングするために注解します。この注釈は構造関数,フィールド,およびSetter法に作用することができる。コンストラクタに作用する例:
    @RestController
    public class TestController {
        private OrderService orderService;
    
        @Autowired
        TestController(OrderService orderService){
            this.orderService = orderService;
        }
    }
    
    フィールドの例に作用します。
    @RestController
    @RequestMapping(value = "/order")
    public class TestController {
        @Autowired
        private OrderService orderService;
    
        @PutMapping("/orders/{id}")
        public OrderDTO findById(@RequestParam(name = "id", defaultValue = "1") String id ){
            return orderService.findOne(id);
        }
    }
    
    Setter方法で作用する例:
    @RestController
    public class TestController {
        private OrderService orderService;
    
        @Autowired
        public void setOrderService(OrderService orderService){
            this.orderService = orderService;
        }
    }
    
    3.2@Primary
    同じタイプのビームを複数配置する必要がある場合、@PrimaryはこれらのBeanの優先度を定義することができる。Primaryの使用例:
    public interface MessageService {
        String sendMessage();
    }
    
    @Primary
    @Component
    public class EmailMessageImpl implements MessageService {
        @Override
        public String sendMessage() {
            return "this is send email method message";
        }
    }
    
    @Component
    public class DingDingMessageImpl implements MessageService {
        @Override
        public String sendMessage() {
            return "this is send dingding method message";
        }
    }
    
    @Component
    public class WeChatMessageImpl implements MessageService {
    
        @Override
        public String sendMessage() {
            return "this is send wechat method message";
        }
    }
    
    @RestController
    public class MessageController {
        @Autowired
        private MessageService messageService;
    
        @GetMapping("/info")
        public String info(){
            return messageService.sendMessage();
        }
    }
    
    出力結果はthis is send email method messageで、Email Message Implの優先度が高いことを示している。
    四、Spring Bootコメント
    4.1@SpringBootApplication
    @Spring Bootaplicationは、彼によって表示されたクラスの中で、1つ以上のBenを定義し、自動的にトリガされる自動構成Beanと自動スキャンコンポーネントです。この注釈は@Configration、@EnbaleAutoConfigrationと@ComponentScanの組み合わせに相当します。Spring Bootメインプログラムには、この注釈が使われています。Spring Bootationの使用例:
    @SpringBootApplication
    public class SellApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(SellApplication.class, args);
    	}
    }
    
    4.2@EnbaleAutoConfigration
    @Enbale AutoConfigrationは、Springを知らせるために、現在のクラスパスで導入された依存パケットに基づいて、これらの依存パケットに関する構成項目を自動的に構成する。
    4.3@Condtional Onclassと@Condtional OnMissingClass
    これらの2つの注釈はクラスの条件注釈に属し、それらはあるクラスが存在するかどうかを判断する根拠として構成を実行するかを決定する。簡単な使用例:
    @Configuration
    @ConditionalOnClass(OrderDTO.class)
    public class MessageController {
      // ...
    }
    
    4.4@Condtional OnBenと@Condational OnMissingBen
    この2つの注釈は対象条件の注釈であり、あるオブジェクトが存在するかどうかに基づいて、構成方法を実行するかどうかを決定する。簡単な使用例:
    @Bean
    @ConditionalOnBean
    LocalContainerEntityManagerFactoryBean entityManagerFactory(){
            // ...
    }
    @Bean
    @ConditionalOnMissingBean
    public LocalContainerEntityManagerFactoryBean myBean(){
           // ...
    }
    
    4.5@Comptional OnPropty
    @Comptional OnPropertyの注釈は、Springプロファイルの構成項目が配置要求を満たしているかどうかによって、表示された方法を実行するかを決定します。
    4.6@Conditional OnResource
    @Conditional OnResourceコメントは、ある設定ファイルが存在する場合に表示される方法です。
    4.7@Coditional OnWebAppliationと@Coditional OnNotWebApple plication
    この二つの注釈は、現在のアプリケーションがWebアプリケーションであるかどうかを判断するために用いられる。Webアプリケーションであれば、Spring WebApplication Contectを使用して、そのセッションのライフサイクルを定義します。