知識庫 / Spring RSS 訂閱

Spring @Enable Annotations 快速指南

Spring
HongKong
10
02:24 PM · Dec 06 ,2025

1. 概述

Spring 提供了集中的註解組 (@Enable 標註),簡化了開發者配置 Spring 應用的過程。這些註解與 @Configuration 標註一起使用。

在本文中,我們將探討這些註解:

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

2.

@EnableWebMvc 註解用於在應用程序中

具有類似功能的 XML 對應項是

可以通過實現

@Configuration
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {

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

3. <em @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 類進行自定義。

@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. <em @EnableScheduling>

該 <em @EnableScheduling> 註解 啓用定時任務功能,並允許我們在應用程序中使用 <em @Scheduled> 註解。 XML 對應的同等功能是使用 <task:*> 命名空間以及 scheduler 屬性。

此配置還可以通過實現 SchedulingConfigurer 類的 <em @Configuration> 類進行自定義:

@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
@EnableAync
public class AsyncConfig { ... }

要了解更多關於使用 Spring 異步的信息,您可以參考這篇文章。

6. <em @EnableWebSocket>

<em @EnableWebSocket</em>> 註解用於配置 WebSocket 請求的處理。可以通過實現 <em WebSocketConfigurer</em>> 類進行自定義:

@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 的更多信息,請參閲這篇文章。

7. <em @EnableJpaRepositories>

@EnableJpaRepositories 註解通過掃描標註的配置類所在包,啓用 Spring Data JPA 倉庫。

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

以下是一些可用的選項:

  • value — 別名,對應於 basePackages() 屬性
  • basePackages — 用於掃描帶有註解的組件的基礎包
  • enableDefaultTransactions — 配置 Spring Data JPA 倉庫是否啓用默認事務
  • entityManagerFactoryRef — 配置用於使用的 EntityManagerFactory bean 定義的名稱

8. <em @EnableTransactionManagement>

該 <em @EnableTransactionManagement> 註解 啓用 Spring 的基於註解的事務管理功能。 XML 對應的命名空間是 <em <tx:*>。

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

關於使用 Spring Transaction Management 的更多信息,您可以參考這篇文檔。

9. <em @EnableJpaAuditing>

@EnableJpaAuditing 註解 啓用您的 JPA 實體上的審計功能。

@Configuration
@EnableJpaAuditing
public class JpaConfig {

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

關於使用 Spring Web Sockets 的更多信息,您可以參考這篇文章。

10. 結論在本文中,我們探討了 @Enable Spring 註解及其在配置 Spring Application 中的應用。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.