详解中春天的JavaConfig注解

  

<强>前言
  

  

大家都知道传统春天一般都是基于xml配置的,不过后来新增了许多JavaConfig的注解。特别是springboot,基本都是清一色的java配置,不了解一下,还真是不适应。这里备注一下。

  

<强> @RestController
  

  

spring4为了更方便的支持restful应用的开发,新增了RestController的注解,比控制器注解多的功能就是给底下的RequestMapping方法默认都加上ResponseBody注解,省得自己再去每个去添加该注解。

  

<强> @ configuration
  

  

这个标注该类是春天的配置类,本身自带组件注解

  

<强> @ImportResource
  

  

对应的xml

        & lt;进口资源=" applicationContext-ehcache.xml "/祝辞      

<强>存在的必要性

  

这个是兼容传统xml配置的,毕竟JavaConfig还不是万能的,比如JavaConfig不能很好地支持aop:顾问和tx:建议,介绍@EnableAspectJAutoProxy(相当于aop: aspectj-autoproxy),介绍@Configuration-based相当于aop:配置xml元素

  

<强> @ComponentScan
  

  

对应的xml

        & lt;上下文:component-scan基础包=" com.xixicat.app "/祝辞      

该配置自动包含了如下配置的功能:

        & lt;上下文:annotation-config/祝辞      

就是向春容器注册AutowiredAnnotationBeanPostProcessor(使用@ autowired必须注册),CommonAnnotationBeanPostProcessor(使用@ resource, @PostConstruct, @PreDestroy等必须注册),PersistenceAnnotationBeanPostProcessor(使用@PersistenceContext必须注册)以及RequiredAnnotationBeanPostProcessor(使用@ required必须注册)这4个BeanPostProcessor。

  

值得注意的是Spring3.1RC2版本是不允许注解配置的类在ComponentScan指定的包范围内的,否则会报错。

  @ bean

<强>/强>
  

  

对应的xml如下:

        & lt; bean id=皁bjectmap”类=" org.codehaus.jackson.map。objectmap "/祝辞      

<强> @EnableWebMvc
  

  

对应的xml如下:

        & lt; mvc:注解驱动/祝辞      

该配置自动注册DefaultAnnotationHandlerMapping(来注册处理程序方法和请求的映射关系)与AnnotationMethodHandlerAdapter(在实际调用处理器方法前对其参数进行处理)两个bean,以支持@ controller注解的使用。

  

主要的作用如下:

  
      <李>可配置的ConversionService(方便进行自定义类型转换)   <李>支持用@NumberFormat格式化数字类型字段李   <李>支持用@DateTimeFormat格式化日期,日历以及Joda时间字段(如果类路径有Joda的时间话)   <李>支持@Valid的参数校验(如果jsr - 303相关供应商有在类路径的话)   <李>支持@RequestBody/@ResponseBody注解的XML读写(如果JAXB在类路径的话)   <李>支持@RequestBody/@ResponseBody注解的JSON读写(如果杰克逊在类路径的话)
      李   
  

<强> @ContextConfiguration
  

  

主要在junit测试时指定java配置

        @RunWith (SpringJUnit4ClassRunner.class)   @ContextConfiguration ({   “classpath *:春天/* . xml”,   “类路径:中”,   “类路径:applicationContext-rabbitmq.xml”,   “类路径:applicationContext-mail.xml”,   “类路径:applicationContext-medis.xml”,   “类路径:applicationContext-mybatis.xml”})   @TransactionConfiguration (transactionManager=癿ybatisTransactionManager defaultRollback=false)   公开课AppBaseTest {//?   }      

<强> @ResponseStatus
  

  

主要休息是开发用,注解返回的http返回码,具体值看org.springframework.http.HttpStatus枚举。一般发布方法返回HttpStatus.CREATED,删除和把方法返回HttpStatus.OK。还可以配置异常处理,见@ExceptionHandler和@ControllerAdvice

  

<强> @ExceptionHandler
  

  

主要用来处理指定的异常,返回返回指定的HTTP状态码,省得每个控制器的方法自己去尝试。一般可以为每个应用定义一个异常基类,然后再定义业务异常,这样这里就可以统一捕获业务异常。

        @ExceptionHandler (BizException.class)   @ResponseStatus (HttpStatus.BAD_REQUEST)   公共@ResponseBody   ReturnMessage bizExceptionHandler(异常交货){   logger.error (ex.getMessage()、交货);   返回新ReturnMessage (HttpStatus.BAD_REQUEST.value (), ex.getMessage ());   }

详解中春天的JavaConfig注解