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 { ... }
常用配置选项:
- value —
basePackages()
的别名 - 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 配置。