实战:构建一个“可组合”的电商系统骨架

步骤 1:项目结构设计

ecommerce-platform/                # 根项目
├── pom.xml                         # 父 POM,定义依赖版本 (BOM)
├── auth-starter/                   # 认证 Starter
│   ├── pom.xml
│   └── src/main/java/com/platform/auth
├── logging-starter/                # 日志脱敏 Starter
│   ├── pom.xml
│   └── src/main/java/com/platform/logging
├── common-util/                    # 通用工具模块
│   ├── pom.xml
│   └── src/main/java/com/platform/util
├── order-module/                   # 订单业务模块
│   ├── pom.xml
│   └── src/main/java/com/platform/order
├── payment-module/                 # 支付业务模块
│   ├── pom.xml
│   └── src/main/java/com/platform/payment
├── monolith-app/                   # 单体应用 (组合所有模块)
│   ├── pom.xml
│   └── src/main/java/com/platform/monolith
└── payment-service/                # 支付微服务 (仅包含 payment-module)
    ├── pom.xml
    └── src/main/java/com/platform/payment_service

步骤 2:定义 BOM (父 POM)

<!-- ecommerce-platform/pom.xml -->
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.platform</groupId>
    <artifactId>ecommerce-platform</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>

    <!-- 定义统一依赖版本 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>3.3.3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.platform</groupId>
                <artifactId>auth-starter</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.platform</groupId>
                <artifactId>logging-starter</artifactId>
                <version>${project.version}</version>
            </dependency>
            <!-- 其他模块... -->
        </dependencies>
    </dependencyManagement>
</project>

步骤 3:构建可复用的 Starter

示例:auth-starter

// AuthAutoConfiguration.java
@Configuration
@EnableConfigurationProperties(AuthProperties.class)
@ConditionalOnClass(Security.class)
public class AuthAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public AuthService authService(AuthProperties properties) {
        return new DefaultAuthService(properties);
    }
}

// AuthProperties.java
@ConfigurationProperties("platform.auth")
public class AuthProperties {
    private String jwtSecret = "default-secret";
    // getter/setter
}
# 在使用方 application.yml 中只需:
platform:
  auth:
    jwt-secret: your-secret-key

步骤 4:业务模块化(order-module

// OrderModuleConfig.java
@Configuration
@Import(AuthAutoConfiguration.class) // 依赖 auth-starter
public class OrderModuleConfig {
    // 定义订单模块的 Beans
}

// OrderService.java
@Service
@RequiredArgsConstructor
public class OrderService {
    private final AuthService authService; // 自动注入
    private final OrderRepository repository;
    // 业务逻辑...
}