«1. Обзор

Spring поставляется с набором аннотаций @Enable, упрощающих разработчикам настройку приложения Spring. Эти аннотации используются вместе с аннотацией @Configuration.

В этой статье мы рассмотрим некоторые из этих аннотаций:

    @EnableWebMvc @EnableCaching @EnableScheduling @EnableAsync @EnableWebSocket @EnableJpaRepositories @EnableTransactionManagement @EnableJpaAuditing

2. @EnableWebMvc

Используется аннотация @EnableWebMvc для включения Spring MVC в приложении и работает путем импорта конфигурации Spring MVC из WebMvcConfigurationSupport.

XML-эквивалентом с аналогичной функциональностью является \u003cmvc:annotation-driven/\u003e.

Конфигурация может быть настроена классом @Configuration, реализующим WebMvcConfigurer:

@Configuration
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(
      List<HttpMessageConverter<?>> converters) {
 
        converters.add(new MyHttpMessageConverter());
    }
 
    // ...
}

3. @EnableCaching

Аннотация @EnableCaching включает возможность управления кэшем на основе аннотаций в приложении и позволяет нам использовать Аннотации @Cacheable и @CacheEvict в нашем приложении.

XML-эквивалентом с аналогичной функциональностью является пространство имен \u003ccache:*\u003e:

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

Эта аннотация также имеет следующие параметры:

    режим — указывает порядок применения рекомендаций по кэшированию — указывает порядок выполнения советника по кэшированию при применении в определенной точке соединения proxyTargetClass — указывает, должны ли создаваться прокси-серверы на основе подкласса (CGLIB) в отличие от стандартных прокси-серверов на основе интерфейса Java

Эта конфигурация снова может быть настроена с помощью класс @Configuration, реализующий класс CachingConfigurerSupport:

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

Для получения дополнительной информации об использовании кэширования Spring вы можете обратиться к этой статье.

4. @EnableScheduling

Аннотация @EnableScheduling включает возможности запланированных задач и позволяет нам использовать аннотации @Scheduled в приложении. XML-эквивалентом с аналогичной функциональностью является пространство имен \u003ctask:*\u003e, использующее атрибут scheduler.

Эту конфигурацию снова можно настроить с помощью класса @Configuration, реализующего класс SchedulingConfigurer:

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

Дополнительные сведения об использовании планирования Spring можно найти в этой статье.

5. @EnableAsync

Аннотация @EnableAsync включает асинхронную обработку в нашем приложении. XML-эквивалентом с аналогичной функциональностью является пространство имен \u003ctask:*\u003e с использованием атрибута исполнителя.

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

Для получения дополнительной информации об использовании Spring async вы можете обратиться к этой статье.

6. @EnableWebSocket

Аннотация @EnableWebSocket используется для настройки обработки запросов веб-сокетов. Настройка может быть выполнена путем реализации класса WebSocketConfigurer:

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

Дополнительные сведения об использовании веб-сокетов Spring см. в этой статье.

7. @EnableJpaRepositories

Аннотация @EnableJpaRepositories включает репозитории Spring Data JPA путем сканирования пакета аннотированного класса конфигурации на наличие репозиториев.

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

Некоторые параметры, доступные для этой аннотации:

    значение — псевдоним для атрибута basePackages(). basePackages — базовые пакеты для сканирования аннотированных компонентов. транзакции для репозиториев Spring Data JPA entityManagerFactoryRef — настраивает имя используемого определения bean-компонента EntityManagerFactory

8. @EnableTransactionManagement

Аннотация @EnableTransactionManagement включает возможность управления транзакциями Spring на основе аннотаций. Эквивалентом XML является пространство имен \u003ctx:*\u003e.

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

Чтобы узнать больше об использовании Spring Transaction Management, вы можете обратиться к этой статье.

9. @EnableJpaAuditing

Аннотация @EnableJpaAuditing позволяет проводить аудит ваших объектов JPA.

@Configuration
@EnableJpaAuditing
public class JpaConfig {

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

Дополнительные сведения об использовании Spring Web Sockets см. в этой статье.

10. Заключение

В этой быстрой статье мы рассмотрели некоторые аннотации @Enable Spring и то, как их можно использовать для настройки приложения Spring.