Maison >Java >javaDidacticiel >Introduction détaillée aux annotations JavaConfig au printemps
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 :
Service de conversion configurable (pratique pour la conversion de type personnalisé)
Support utilisant @ NumberFormat formate les champs de type numérique
Prend en charge l'utilisation de @DateTimeFormat pour formater les champs Date, Calendrier et Joda Time (si le chemin de classe a Joda Time)
Support @Vérification des paramètres valides (si le fournisseur associé à JSR-303 est sur le chemin de classe)
Prise en charge de la lecture et de l'écriture XML de l'annotation @RequestBody/@ResponseBody (si JAXB est sur le chemin de classe)
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!