Spring中のJavaConfigの注釈を詳しく説明する.

4449 ワード

前言
伝統的なspringは一般的にxmlの構成に基づいていることはよく知られていますが、その後、JavaConfigの注釈がたくさん追加されました.特にspringbootは、基本的にjava config一色です.よく分かりません.本当に慣れません.ここでメモします.
@RertController
spring 4は、より便利なサポートのために、Request Mapping方法のデフォルトにReponseBodyの注釈を加えて、Controllerより多くの機能を注入します.
@Configration
この表示はspringの配置類で、自分でComponentの注釈を持っています.
@Import Resource
対応のxml

存在の必要性
これは伝統的なxmlの構成に対応しています.JavaConfigはまだ万能ではないです.たとえば、JavaConfigはaop:advisorとtx:advice、Introduce@EverapectJAtoxy(equive to aop:aspect J-atoxy)をうまくサポートできません.
@ComponentScan
対応のxml

この構成は自動的に以下の構成の機能を含んでいます.

Spring容器にAutowiredAnnotationBeanPostProcessor(@Autowiredを使用して登録しなければなりません)、Common AnnotationBeanPostProcessor(@Resource、@PostCorstruct、@Predestroyなどを使用して登録しなければなりません)、PersistensistenAnrstationPostone PostProtocestorstrocessorおよび登録しなければなりません.(@Requiredを使って登録しなければなりません)この4つのBeanPostProcessor.
注意すべきなのはSpring 3.1 RC 2バージョンで、ComponentScanで指定されたパッケージの範囲内でComponentrationのクラスを注釈してはいけません.そうでないとエラーが発生します.
@ビーン
対応するxmlは以下の通りです.

@EnbleWebMvc
対応するxmlは以下の通りです.

この構成は自動的にDefault AnnotationHandlerMappingとAnnotationMethodとrequestのmapping関係を登録します.AnnotationMethodhandler Adapterの2つのbeanは、@Controller注釈の使用をサポートします.
主な役割は以下の通りです.
  • 設定可能なCoversionService(カスタムタイプ変換が容易)
  • @Number Formatでデジタルタイプフィールドをフォーマットすることができます.
  • @DateTimeFormatフォーマットDate、CalendarおよびJoda Timeフィールドをサポートします.(もしclasassipathにJoda Timeがあれば)
  • @Validのパラメータチェックをサポートします.(JSR-303関連プロバイダーがクラスパスにいるなら)
  • サポート@Request Body/@ReponseBody注釈のXML読み書き(JAXBがclassipathにいるなら)
  • @Request Body/@RespnseBody注釈のJSON読み書き(Jacksonがclassipathにいたら)
  • @Contect Configration
    主にjunnitテスト時にjava configを指定します.
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration({
     "classpath*:spring/*.xml",
     "classpath:applicationContext.xml",
     "classpath:applicationContext-rabbitmq.xml",
     "classpath:applicationContext-mail.xml",
     "classpath:applicationContext-medis.xml",
     "classpath:applicationContext-mybatis.xml"})
    @TransactionConfiguration(transactionManager = "mybatisTransactionManager", defaultRollback = false)
    public class AppBaseTest {
     //......
    }
    @ResonseStatus
    主にレスト開発用のhttpリターンコードです.具体的な値はorg.spring frame ebook.http.HttpStarts列挙を見ます.一般的なpostメソッドはHttpStatus.cREATEDに戻ります.DELETEとPUT方法はHttpStatus.OKに戻ります.また、異常処理を設定できます.@ExceptionHandlerとControlles@Controllect Atroptrace
    @Exception Handler
    主に指定された異常を処理し、指定されたHTTP状態コードを返して、各コントローラのメソッドを省き、自分でtry catchに行きます.通常は各アプリケーションのために異常ベースクラスを定義して、業務異常を再定義することができます.
    
    @ExceptionHandler(BizException.class)
     @ResponseStatus(HttpStatus.BAD_REQUEST)
     public @ResponseBody
     ReturnMessage bizExceptionHandler(Exception ex) {
      logger.error(ex.getMessage(),ex);
      return new ReturnMessage(HttpStatus.BAD_REQUEST.value(),ex.getMessage());
     }
    ただし、この方法はcontrollerのメソッド呼び出しチェーンによって発生する異常に限られており、spring内にタイミングタスクが使用されていたら、この注釈はブロックされない.
    @Controller Advice
    @Exception Handlerに合わせて、controllerをブロックする方法です.
    
    @ControllerAdvice
    public class ErrorController {
     
     private static final Logger logger = LoggerFactory.getLogger(ErrorController.class);
     
     @ExceptionHandler(BizException.class)
     @ResponseStatus(HttpStatus.BAD_REQUEST)
     public @ResponseBody
     ReturnMessage bizExceptionHandler(Exception ex) {
      logger.error(ex.getMessage(),ex);
      return new ReturnMessage(HttpStatus.BAD_REQUEST.value(),ex.getMessage());
     }
     
     @ExceptionHandler(Exception.class)
     @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
     public @ResponseBody
     ReturnMessage serverExceptionHandler(Exception ex) {
      logger.error(ex.getMessage(),ex);
      return new ReturnMessage(HttpStatus.INTERNAL_SERVER_ERROR.value(),ex.getMessage());
     }
    }
    締め括りをつける
    以上はこの文章の全部の内容です.本文の内容は皆さんの学習や仕事に一定の助けをもたらしてほしいです.もし疑問があれば、メッセージを残して交流してもいいです.