Краткое руководство по Spring @Enable Аннотации

Краткое руководство по Spring @Enable Аннотации

1. обзор

Spring поставляется с набором@Enable annotations that make it easier for developers to configure a Spring application. Это аннотацииused in conjunction with the @Configuration annotation.

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

  • @EnableWebMvc

  • @EnableCaching

  • @EnableScheduling

  • @EnableAsync

  • @EnableWebSocket

  • @EnableJpaRepositories

  • @EnableTransactionManagement

  • @EnableJpaAuditing

2. @EnableWebMvcс

Аннотация@EnableWebMvc используется дляenabling Spring MVC in an application и работает путем импорта конфигурации Spring MVC изWebMvcConfigurationSupport.

Эквивалент XML с аналогичной функциональностью:<mvc:annotation-driven/>.

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

@Configuration
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(
      List> converters) {

        converters.add(new MyHttpMessageConverter());
    }

    // ...
}

3. @EnableCachingс

Возможность аннотации@EnableCachingenables annotation-driven cache management в приложении иallows us to use the @Cacheable and @CacheEvict annotations в нашем приложении.

Эквивалент XML с аналогичной функциональностью - пространство имен<cache:*>:

@Configuration
@EnableCaching
public class CacheConfig {

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

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

  • mode - указывает, как следует применять совет по кешированию

  • order - указывает порядок советника по кэшированию выполнения при применении в определенной точке соединения

  • 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 вы можете обратиться к этомуarticle.

4. @EnableSchedulingс

Аннотация@EnableSchedulingenables scheduled task capabilities and allows us to use @Scheduled annotations в приложении. Эквивалентом XML с аналогичной функциональностью является пространство имен<task:*>, использующее атрибут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 вы можете обратиться к этомуarticle.

5. @EnableAsyncс

Аннотация@EnableAsyncenables asynchronous processing in our application. Эквивалентом XML с аналогичной функциональностью является пространство имен<task:*>, использующее атрибутexecutor.

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

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

6. @EnableWebSocketс

Аннотация@EnableWebSocket используется дляconfigure the processing of web socket requests. Настройка может быть выполнена путем реализации класса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 Websockets вы можете обратиться к этомуarticle.

7. @EnableJpaRepositoriesс

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

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

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

  • value - псевдоним атрибутаbasePackages()

  • basePackages - базовые пакеты для сканирования аннотированных компонентов

  • enableDefaultTransactions - настраивает, следует ли включать транзакции по умолчанию для репозиториев Spring Data JPA

  • entityManagerFactoryRef - задает имя используемого определения bean-компонентаEntityManagerFactory

8. @EnableTransactionManagementс

Аннотация@EnableTransactionManagementenables Spring’s annotation-driven transaction management capability. Эквивалент XML - это пространство имен<tx:*>.

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

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

9. @EnableJpaAuditingс

Аннотация@EnableJpaAuditingenables auditing on your JPA entities.

@Configuration
@EnableJpaAuditing
public class JpaConfig {

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

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

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

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