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

Spring 基於 Java 配置完整指南:@Configuration、@Bean、依賴注入與 AnnotationConfigApplicationContext 實戰

     編輯:Java 綜合教學

啟用 Java 配置:最小化 XML 引導

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:context="https://www.springframework.org/schema/context"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="https://www.springframework.org/schema/beans
           https://www.springframework.org/schema/beans/spring-beans.xsd
           https://www.springframework.org/schema/context
           https://www.springframework.org/schema/context/spring-context.xsd">

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

component-scan 會自動識別 @Configuration 類並註冊為 Bean 定義源。

定義配置類與 Bean 声明

@Configuration
public class AppConfig {

    @Bean
    public DataSource dataSource() {
        HikariDataSource ds = new HikariDataSource();
        ds.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
        ds.setUsername("root");
        ds.setPassword("secret");
        return ds;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        // 參數自動注入:Spring 會調用 dataSource() 獲取依賴
        return new JdbcTemplate(dataSource);
    }

    @Bean
    @Primary // 標記為首選,解決多實現歧義
    public CacheManager cacheManager() {
        return new ConcurrentMapCacheManager("default");
    }
}

三種依賴注入方式對比

1. 構造器注入(推薦,不可變、可測試)

@Bean
public OrderService orderService(UserRepository userRepo, PaymentClient payClient) {
    return new OrderServiceImpl(userRepo, payClient);
}

2. Setter 注入(可選依賴)

@Bean
public EmailService emailService() {
    EmailService svc = new EmailService();
    svc.setHost("smtp.example.com");
    svc.setPort(587);
    return svc;
}

3. Bean 方法直接調用(Spring 攔截代理)

@Bean
public SecurityFilter securityFilter() {
    return new SecurityFilter(authenticationManager()); // 非遞歸調用,返回代理 Bean
}

@Bean
public AuthenticationManager authenticationManager() {
    return new ProviderManager(List.of(daoAuthenticationProvider()));
}

關鍵機制:@Configuration 類被 CGLIB 代理,Bean 方法調用被攔截,優先從容器獲取單例,避免重複創建。

Java 配置優勢總結

  • 類型安全:編譯期檢查 Bean 類型與依賴關係
  • 重構友好:IDE 重構自動更新引用,無字符串魔法值
  • 條件裝配:@ConditionalOnProperty、@ConditionalOnMissingBean 等靈活控制
  • 配置類組合:@Import、@Profile 實現模塊化配置

啟動容器與獲取 Bean

@Configuration
@PropertySource("classpath:db.properties")
public class DbConfig {
    @Value("${jdbc.url}") String url;
    @Value("${jdbc.user}") String user;
    @Value("${jdbc.pass}") String pass;

    @Bean
    public DataSource dataSource() { /* 使用上屬性 */ }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved