首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Spring S2SH 框架整合:註解 vs XML 配置選型建議

     編輯:程式設計綜合問答

結論:能用註解盡量用註解,XML 僅作補充

註解優勢

  • 代碼與配置合一:類上標註 @Service、方法上 @Transactional,閱讀即理解,無需在 XML 間跳轉。
  • 重構友好:IDE 重命名類/方法自動同步,XML 易遺漏導致運行時錯誤。
  • 啟動性能:掃描註解比解析龐大 XML 略快(微乎其微),運行期無差異。
  • 條件裝配:@ConditionalOnProperty、@Profile 靈活控制 Bean 生命週期。

XML 仍需場景

  • 第三方庫類無法添加註解(如 DataSource、SessionFactory)。
  • 複雜集合屬性注入(<list>/<map>/<props>)。
  • 跨項目共享基礎設施配置(如統一的事務管理、AOP 切面定義)。
  • 遺留項目遷移期混合模式。

最佳實踐:混合模式

<!-- applicationContext.xml -->
<context:component-scan base-package="com.myapp" />  <!-- 掃描註解 Bean -->
<context:annotation-config />                     <!-- 支持 @Autowired 等 -->
<tx:annotation-driven transaction-manager="txManager" /> <!-- 註解事務 -->

<!-- 僅 XML 配置第三方/基礎設施 Bean -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"> ... </bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> ... </bean>

性能迷思澄清

「註解慢」是錯覺。Spring 啟動時掃描類路徑解析註解,一次性構建 BeanDefinition 緩存;運行期完全基於 BeanDefinition,與 XML 解析來源無關。真正影響性能的是:

  • 掃描包範圍過大(base-package="com")導致類加載爆炸。
  • 過度使用 @Autowired 字段注入導致循環依賴檢測開銷。
  • 未啟用 spring-context-indexer 編譯期生成候選索引(Spring 5+)。

遷移建議

  1. 新項目:純註解 + Java Config(@Configuration),無 XML。
  2. 舊項目:逐步將業務層 Bean 遷移為註解,基礎設施層保留 XML。
  3. 團隊統一代碼風格:@Service/@Repository/@Component 分層標註,禁用 @ComponentScan 無參數掃描全盤。

核心原則:註解為主,XML 為輔,配置與代碼同在一處,降低認知負荷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved