Maison >Java >javaDidacticiel >Introduction détaillée aux annotations JavaConfig au printemps

Introduction détaillée aux annotations JavaConfig au printemps

黄舟
黄舟original
2017-03-09 11:01:241410parcourir

Lors du développement de programmes Java, en particulier d'applications Java EE, il est toujours inévitable de traiter divers fichiers de configuration. Les annotations Java nous aident à le rendre plus ordonné et à empêcher les fichiers de configuration de voler partout. L'article suivant présente principalement en détail les annotations JavaConfig dans Spring. Les amis dans le besoin peuvent s'y référer.

Avant-propos

Tout le monde sait que Spring traditionnel est généralement basé sur une configuration XML, mais plus tard, de nombreuses annotations JavaConfig ont été ajoutées. Surtout Springboot, il s'agit essentiellement de toute la configuration Java. Si vous ne la comprenez pas, vous n'y êtes vraiment pas habitué. Prenez note ici.

@RestController

Afin de prendre en charge plus facilement le développement d'applications reposantes, Spring 4 a ajouté des annotations RestController. Plus de fonctions que les annotations du contrôleur sont données ci-dessous. La méthode RequestMapping ajoute l'annotation ResponseBody par défaut, vous évitant ainsi d'avoir à ajouter l'annotation à chacune d'elles.

@Configuration

Cette annotation indique que cette classe est la classe de configuration de Spring et elle est livrée avec l'annotation Component

@ ImportResource

Le XML correspondant

<import resource="applicationContext-ehcache.xml"/>

Nécessité d'existence

Ceci est compatible avec la configuration XML traditionnelle. Après tout, JavaConfig n'est pas omnipotent. Par exemple, JavaConfig ne peut pas bien prendre en charge aop:advisor et tx:advice. Introduisez @EnableAspectJAutoProxy (équivalent à aop:aspectj-autoproxy), Introduisez @Configuration-. basé sur l'équivalent de l'élément XML aop:config

@ComponentScan

XML correspondant

<context:component-scan base-package="com.xixicat.app"/>

Cette configuration inclut automatiquement les fonctions de configuration suivantes :

<context:annotation-config/>

consiste à enregistrer AutowiredAnnotationBeanPostProcessor (obligatoire pour utiliser @Autowired), CommonAnnotationBeanPostProcessor (Il existe quatre BeanPostProcessors (doivent être enregistrés pour utiliser @Resource, @PostConstruct, @PreDestroy, etc.), PersistenceAnnotationBeanPostProcessor (doivent être enregistrés pour utiliser @PersistenceContext) et RequiredAnnotationBeanPostProcessor (doivent être enregistrés pour utiliser @Required).

Il convient de noter que la version Spring 3.1RC2 ne permet pas aux classes annotées avec Configuration d'être dans la portée du package spécifiée par ComponentScan, sinon une erreur sera signalée.

@Bean

Le xml correspondant est le suivant :

<bean id="objectMapper" class="org.codehaus.jackson.map.ObjectMapper" />

@EnableWebMvc

Le XML correspondant est le suivant :

<mvc:annotation-driven />

Cette configuration s'enregistre automatiquement DefaultAnnotationHandlerMapping (pour enregistrer la relation de mappage entre la méthode du gestionnaire et la demande) et AnnotationMethodHandlerAdapter (traitant les paramètres de la méthode du gestionnaire avant de l'appeler réellement) sont deux beans pour prendre en charge l'utilisation des annotations @Controller.

Les fonctions principales sont les suivantes :

  1. Service de conversion configurable (pratique pour la conversion de type personnalisé)

  2. Support utilisant @ NumberFormat formate les champs de type numérique

  3. Prend en charge l'utilisation de @DateTimeFormat pour formater les champs Date, Calendrier et Joda Time (si le chemin de classe a Joda Time)

  4. Support @Vérification des paramètres valides (si le fournisseur associé à JSR-303 est sur le chemin de classe)

  5. Prise en charge de la lecture et de l'écriture XML de l'annotation @RequestBody/@ResponseBody (si JAXB est sur le chemin de classe)

  6. Prise en charge de la lecture et de l'écriture JSON des annotations @RequestBody/@ResponseBody (si Jackson est sur le chemin de classe)

@ContextConfiguration

Spécifiez principalement la configuration Java lors des tests Junit

@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 {
 //......
}

@ResponseStatus

est principalement utilisé pour le développement rest. Annotez le code de retour http renvoyé Pour la valeur spécifique, voir l'énumération org.springframework.http.HttpStatus. Généralement, la méthode post renvoie HttpStatus.CREATED et les méthodes DELETE et PUT renvoient HttpStatus.OK. Vous pouvez également configurer la gestion des exceptions, voir @ExceptionHandler et @ControllerAdvice

@ExceptionHandler

est principalement utilisé pour gérer les exceptions spécifiées et renvoyer le code d'état HTTP spécifié. , en enregistrant chaque méthode de contrôleur avec son propre try catch. En règle générale, vous pouvez définir une classe de base d'exceptions pour chaque application, puis définir des exceptions métier, afin que les exceptions métier puissent être capturées uniformément.

@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());
 }

Cependant, il convient de noter que cette méthode est limitée aux exceptions générées par la chaîne d'appel de méthode du contrôleur. Et si les tâches planifiées étaient également utilisées dans. spring ? Oui, cette annotation ne sera pas interceptée.

@ControllerAdvice

Utilisé en conjonction avec @ExceptionHandler pour intercepter la méthode du contrôleur.

@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());
 }
}

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn