1. 概述

Spring 提供了一系列 @Enable 注解,极大简化了 Spring 应用的配置过程。这些注解通常需要与 @Configuration 注解配合使用。

本文将重点介绍以下常用注解:

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

2. @EnableWebMvc

@EnableWebMvc 注解用于启用 Spring MVC 功能,其核心原理是从 WebMvcConfigurationSupport 导入 MVC 配置。

对应的 XML 配置是 <mvc:annotation-driven/>

可通过实现 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 配置是 <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 接口代理

通过继承 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 配置是 <task:*> 命名空间的 scheduler 属性。

通过实现 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 配置是 <task:*> 命名空间的 executor 属性。

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

✅ 更多 Spring 异步处理用法可参考 这篇文章

6. @EnableWebSocket

@EnableWebSocket 注解用于配置 WebSocket 请求处理。通过实现 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 WebSocket 用法可参考 这篇文章

7. @EnableJpaRepositories

@EnableJpaRepositories 注解启用 Spring Data JPA 仓库功能,通过扫描配置类所在包查找仓库接口。

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

常用配置选项:

  • valuebasePackages() 的别名
  • basePackages — 指定扫描的基础包
  • enableDefaultTransactions — 是否为 JPA 仓库启用默认事务
  • entityManagerFactoryRef — 指定使用的 EntityManagerFactory Bean 名称

8. @EnableTransactionManagement

@EnableTransactionManagement 注解启用 Spring 的注解驱动事务管理。对应的 XML 配置是 <tx:*> 命名空间。

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

✅ 更多 Spring 事务管理用法可参考 这篇文章

9. @EnableJpaAuditing

@EnableJpaAuditing 注解启用 JPA 实体审计功能

@Configuration
@EnableJpaAuditing
public class JpaConfig {

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

✅ 更多 JPA 审计用法可参考 这篇文章

10. 总结

本文快速介绍了 Spring 常用的 @Enable 注解,展示了它们如何简化 Spring 应用的配置过程。合理使用这些注解能显著提升开发效率,避免繁琐的 XML 配置。


原始标题:Quick Guide to the Spring @Enable Annotations