Guia rápido das anotações do Spring @Enable

Guia rápido das anotações do Spring @Enable

1. Visão geral

A primavera vem com um conjunto de@Enable annotations that make it easier for developers to configure a Spring application. Essas anotações sãoused in conjunction with the @Configuration annotation.

Neste artigo, veremos algumas dessas anotações:

  • @EnableWebMvc

  • @EnableCaching

  • @EnableScheduling

  • @EnableAsync

  • @EnableWebSocket

  • @EnableJpaRepositories

  • @EnableTransactionManagement

  • @EnableJpaAuditing

2. @EnableWebMvc

A anotação@EnableWebMvc é usada paraenabling Spring MVC in an applicatione funciona importando a configuração Spring MVC deWebMvcConfigurationSupport.

O equivalente XML com funcionalidade semelhante é<mvc:annotation-driven/>.

A configuração pode ser personalizada pela classe@Configuration implementando oWebMvcConfigurer:

@Configuration
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(
      List> converters) {

        converters.add(new MyHttpMessageConverter());
    }

    // ...
}

3. @EnableCaching

A anotação@EnableCaching capacidadeenables annotation-driven cache management dentro do aplicativo eallows us to use the @Cacheable and @CacheEvict annotations em nosso aplicativo.

O equivalente XML com funcionalidade semelhante é o namespace<cache:*>:

@Configuration
@EnableCaching
public class CacheConfig {

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

Esta anotação também possui as seguintes opções:

  • mode - indica como o conselho de cache deve ser aplicado

  • order - indica a ordem do consultor de cache de execução quando aplicado em um ponto de junção específico

  • proxyTargetClass - indica se os proxies baseados em subclasse (CGLIB) devem ser criados em oposição aos proxies baseados na interface Java padrão

Esta configuração novamente pode ser personalizada pela classe@Configuration implementando a 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();
    }
}

Para obter mais informações sobre como usar o cache do Spring, você pode consultar estearticle.

4. @EnableScheduling

A anotação@EnableSchedulingenables scheduled task capabilities and allows us to use @Scheduled annotations no aplicativo. O equivalente XML com funcionalidade semelhante é o namespace<task:*> usando o atributoscheduler.

Esta configuração novamente pode ser personalizada pela classe@Configuration implementando a 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);
    }
}

Para obter mais informações sobre como usar o agendamento Spring, você pode consultar estearticle.

5. @EnableAsync

A anotação@EnableAsyncenables asynchronous processing in our application. O equivalente XML com funcionalidade semelhante é o namespace<task:*> usando o atributoexecutor.

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

Para obter mais informações sobre como usar Spring async, você pode consultar estearticle.

6. @EnableWebSocket

A anotação@EnableWebSocket é usada paraconfigure the processing of web socket requests. A personalização pode ser feita implementando a 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();
    }
}

Para mais informações sobre como usar Spring Websockets, você pode consultar estearticle.

7. @EnableJpaRepositories

A anotação@EnableJpaRepositoriesenables Spring Data JPA repositories examinando o pacote da classe de configuração anotada em busca de repositórios.

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

Algumas opções disponíveis para esta anotação são:

  • value - alias para o atributobasePackages()

  • basePackages - pacotes de base para procurar componentes anotados

  • enableDefaultTransactions - configura se deve ou não habilitar transações padrão para repositórios Spring Data JPA

  • entityManagerFactoryRef - configura o nome da definição de beanEntityManagerFactory a ser usada

8. @EnableTransactionManagement

A anotação@EnableTransactionManagementenables Spring’s annotation-driven transaction management capability. O equivalente XML é o namespace<tx:*>.

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

Para obter mais informações sobre como usar o Spring Transaction Management, você pode consultar estearticle.

9. @EnableJpaAuditing

A anotação@EnableJpaAuditingenables auditing on your JPA entities.

@Configuration
@EnableJpaAuditing
public class JpaConfig {

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

Para obter mais informações sobre como usar Spring Web Sockets, você pode consultar estearticle.

10. Conclusão

Neste artigo rápido, vimos algumas anotações Spring de@Enable e como elas podem ser usadas para nos ajudar a configurar um aplicativo Spring.