首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring 3.0 基於註解的依賴注入全景指南:從組件掃描到混合配置

     編輯:Java 相關知識

Spring 3.0 註解驅動配置核心體系

Spring 3.0 引入完整的 JSR-330/JSR-250 註解支持,使 XML 不再是唯一配置選項。本文系統梳理 @Component 族系、生命週期、依賴檢查、自動裝配、JavaConfig 及混合配置全體系。

組件識別四大註解:層次化語義標記

註解目標層額外語義
@RepositoryDAO/數據訪問異常轉換(持久層異常 → Spring DataAccessException)
@Service業務邏輯/服務層當前功能等同 @Component,語義標記
@Controller表現層/控制器當前功能等同 @Component,語義標記
@Component通用組件基礎組件標記,可元註解擴展自定義註解

啟用掃描:<context:component-scan base-package="com.example"/>

Bean 名稱生成與作用域控制

  • 默認名稱:非限定類名首字母小寫(如 userDaoImpl)。
  • 指定名稱:@Repository("myDao") 或 @Component("myBean")。
  • 自定義命名策略:實現 BeanNameGenerator,配置 name-generator 屬性。
  • 作用域:@Scope("prototype"),默認 singleton。自定義解析器實現 ScopeMetadataResolver。

生命週期回調:三種方式對比

依賴檢查:@Required 細粒度控制

  • 僅標注於 Setter 方法,檢查「Setter 是否被調用」而非「屬性是否非空」。
  • 啟用:<context:annotation-config/>。
  • 未滿足拋異常,強制屬性注入。

自動裝配三大註解深度解析

@Autowired:按類型裝配核心

  • 作用於:構造器、Setter、字段、任意多參方法。
  • 數組/集合/Map(Key 為 String)自動收集所有匹配 Bean。
  • required=false 允許不滿足。類中僅一個構造器可 required=true。
  • 特殊類型(BeanFactory、ApplicationContext 等)自動注入,忽略 @Qualifier。

@Qualifier:消除歧義利器

  • 配合 @Autowired 指定 Bean 名稱:@Autowired @Qualifier("primaryDao")。
  • 可標注方法參數:@Autowired public void setDao(@Qualifier("primary") Dao dao)。
  • XML 聲明:<qualifier value="primary"/> 或 <meta key="type" value="primary"/>。

@Resource (JSR-250):按名稱裝配首選

  • 語義:@Resource(name="beanName"),默認取字段/屬性名。
  • 回退策略:byName 失敗 → 嘗試 byType。
  • 系統類型注入同 @Autowired,忽略 @Qualifier。

JavaConfig:@Configuration + @Bean 純 Java 配置

@Configuration
@Import({ServiceConfig.class, DaoConfig.class})  // 組合配置類
public class AppConfig {
    @Bean(initMethod = "init", destroyMethod = "cleanup")
    @Scope("prototype")
    public UserService userService() {
        return new UserServiceImpl(userDao());
    }
    
    @Bean
    public UserDao userDao() {
        return new UserDaoImpl();
    }
}

容器啟動:

// 1. 掃描包路徑
new AnnotationConfigApplicationContext("com.example");

// 2. 直接指定配置類
new AnnotationConfigApplicationContext(AppConfig.class);

// 3. 動態註冊
ctx.register(OtherConfig.class);
ctx.refresh();

混合配置:XML 與註解協作最佳實踐

XML 為主,引入註解配置類

<context:annotation-config/>
<bean class="com.example.config.AppConfig"/>

<context:component-scan base-package="com.example.config"/>

註解為主,導入 XML

@Configuration
@ImportResource("classpath:/spring/legacy-beans.xml")
public class AppConfig { ... }

總結

註解配置簡潔直觀,適合標準化場景;XML 功能豐富成熟,支援複雜裝配。現代 Spring 專案推薦註解為主、XML 為輔,靈活組合發揮各自優勢。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方式優點缺點推薦度
實現 InitializingBean/DisposableBean標準接口強耦合 Spring API⭐
XML init-method/destroy-method零侵入,靈活配置分散⭐⭐⭐
@PostConstruct/@PreDestroy (JSR-250)標準化,就近聲明需 <context:annotation-config/>⭐⭐⭐⭐⭐