Guide rapide sur les annotations Spring @Enable

Guide rapide sur les annotations Spring @Enable

1. Vue d'ensemble

Spring est livré avec un ensemble de@Enable annotations that make it easier for developers to configure a Spring application. Ces annotations sontused in conjunction with the @Configuration annotation.

Dans cet article, nous allons examiner quelques annotations:

  • @EnableWebMvc

  • @EnableCaching

  • @EnableScheduling

  • @EnableAsync

  • @EnableWebSocket

  • @EnableJpaRepositories

  • @EnableTransactionManagement

  • @EnableJpaAuditing

2. @EnableWebMvc

L'annotation@EnableWebMvc est utilisée pourenabling Spring MVC in an application et fonctionne en important la configuration Spring MVC à partir deWebMvcConfigurationSupport.

L'équivalent XML avec des fonctionnalités similaires est<mvc:annotation-driven/>.

La configuration peut être personnalisée par la classe@Configuration implémentant lesWebMvcConfigurer:

@Configuration
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(
      List> converters) {

        converters.add(new MyHttpMessageConverter());
    }

    // ...
}

3. @EnableCaching

La capacité d'annotation@EnableCachingenables annotation-driven cache management dans l'application etallows us to use the @Cacheable and @CacheEvict annotations dans notre application.

L'équivalent XML avec des fonctionnalités similaires est l'espace de noms<cache:*>:

@Configuration
@EnableCaching
public class CacheConfig {

    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        cacheManager.setCaches(
          Arrays.asList(new ConcurrentMapCache("default")));
        return cacheManager;
    }
}

Cette annotation comporte également les options suivantes:

  • mode - indique comment les conseils de mise en cache doivent être appliqués

  • order - indique l'ordre du conseiller de mise en cache d'exécution lorsqu'il est appliqué à un point de jointure spécifique

  • proxyTargetClass - indique si des proxys basés sur des sous-classes (CGLIB) doivent être créés par opposition aux proxys basés sur une interface Java standard

Cette configuration peut à nouveau être personnalisée par la classe@Configuration implémentant la classeCachingConfigurerSupport:

@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {

    @Bean
    @Override
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        cacheManager.setCaches(
          Arrays.asList(new ConcurrentMapCache("default")));
        return cacheManager;
    }

    @Bean
    @Override
    public KeyGenerator keyGenerator() {
        return new MyKeyGenerator();
    }
}

Pour plus d'informations sur l'utilisation de la mise en cache Spring, vous pouvez vous référer à cearticle.

4. @EnableScheduling

L'annotation@EnableSchedulingenables scheduled task capabilities and allows us to use @Scheduled annotations dans l'application. L'équivalent XML avec des fonctionnalités similaires est l'espace de noms<task:*> utilisant l'attributscheduler.

Cette configuration peut à nouveau être personnalisée par la classe@Configuration implémentant la classeSchedulingConfigurer:

@Configuration
@EnableScheduling
public class SchedulingConfig implements SchedulingConfigurer {

    @Override
    public void configureTasks(
      ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.setScheduler(taskExecutor());
    }

    @Bean(destroyMethod = "shutdown")
    public Executor taskExecutor() {
        return Executors.newScheduledThreadPool(100);
    }
}

Pour plus d'informations sur l'utilisation de la planification Spring, vous pouvez vous référer à cearticle.

5. @EnableAsync

L'annotation@EnableAsyncenables asynchronous processing in our application. L'équivalent XML avec des fonctionnalités similaires est l'espace de noms<task:*> utilisant l'attributexecutor.

@Configuration
@EnableAync
public class AsyncConfig { ... }

Pour en savoir plus sur l'utilisation de Spring async, vous pouvez vous référer à cearticle.

6. @EnableWebSocket

L'annotation@EnableWebSocket est utilisée pourconfigure the processing of web socket requests. La personnalisation peut être effectuée en implémentant la classeWebSocketConfigurer:

@Configuration
@EnableWebSocket
public class MyConfiguration implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(echoWebSocketHandler(), "/echo").withSockJS();
    }

    @Bean
    public WebSocketHandler echoWebSocketHandler() {
        return new EchoWebSocketHandler();
    }
}

Pour plus d'informations sur l'utilisation de Spring Websockets, vous pouvez vous référer à cearticle.

7. @EnableJpaRepositories

L'annotation@EnableJpaRepositoriesenables Spring Data JPA repositories en analysant le package de la classe de configuration annotée pour les référentiels.

@Configuration
@EnableJpaRepositories
public class JpaConfig { ... }

Certaines options disponibles pour cette annotation sont:

  • value - alias pour l'attributbasePackages()

  • basePackages - packages de base pour rechercher les composants annotés

  • enableDefaultTransactions - configure l'activation ou non des transactions par défaut pour les référentiels Spring Data JPA

  • entityManagerFactoryRef - configure le nom de la définition du beanEntityManagerFactory à utiliser

8. @EnableTransactionManagement

L'annotation@EnableTransactionManagementenables Spring’s annotation-driven transaction management capability. L'équivalent XML est l'espace de noms<tx:*>.

@Configuration
@EnableTransactionManagement
public class JpaConfig { ... }

Pour plus d'informations sur l'utilisation de Spring Transaction Management, vous pouvez vous référer à cearticle.

9. @EnableJpaAuditing

L'annotation@EnableJpaAuditingenables auditing on your JPA entities.

@Configuration
@EnableJpaAuditing
public class JpaConfig {

    @Bean
    public AuditorAware auditorProvider() {
        return new AuditorAwareImpl();
    }
}

Pour plus d'informations sur l'utilisation de Spring Web Sockets, vous pouvez vous référer à cearticle.

10. Conclusion

Dans cet article rapide, nous avons examiné certaines annotations Spring de@Enable et comment elles peuvent être utilisées pour nous aider à configurer une application Spring.