public class UserService {
private UserRepository userRepository = new UserRepository();
public void saveUser(User user) {
userRepository.save(user);
}
}
public class OrderService {
private final PaymentProcessor paymentProcessor;
private final InventoryService inventoryService;
public OrderService(PaymentProcessor paymentProcessor, InventoryService inventoryService) {
this.paymentProcessor = paymentProcessor;
this.inventoryService = inventoryService;
}
public void processOrder(Order order) {
if (inventoryService.checkStock(order)) {
paymentProcessor.charge(order);
inventoryService.updateStock(order);
}
}
}
@Component public class ProductService {
private final ProductRepository productRepository;
private final CacheManager cacheManager;
@Autowired
public ProductService(ProductRepository productRepository,
@Qualifier("redisCache") CacheManager cacheManager) {
this.productRepository = productRepository;
this.cacheManager = cacheManager;
}
}
@Configuration public class AppConfig {
@Bean
@Primary
public DataSource mysqlDataSource() {
return DataSourceBuilder.create()
.url("jdbc:mysql://localhost:3306/youxue")
.username("admin")
.password("password")
.build();
}
@Bean
@Qualifier("h2DataSource")
public DataSource h2DataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:schema.sql")
.build();
}
}
public interface PaymentProcessor {
PaymentResult process(PaymentRequest request);
boolean supports(PaymentMethod method);
}
@Service public class AlipayProcessor implements PaymentProcessor {
private final AlipayClient alipayClient;
public AlipayProcessor(AlipayClient alipayClient) {
this.alipayClient = alipayClient;
}
@Override
public PaymentResult process(PaymentRequest request) {
// 支付宝支付逻辑
return new PaymentResult(true, "支付成功");
}
@Override
public boolean supports(PaymentMethod method) {
return method == PaymentMethod.ALIPAY;
}
}
@Service public class PaymentService {
private final List<PaymentProcessor> processors;
public PaymentService(List<PaymentProcessor> processors) {
this.processors = processors;
}
public PaymentResult processPayment(PaymentRequest request) {
return processors.stream()
.filter(processor -> processor.supports(request.getMethod()))
.findFirst()
.orElseThrow(() -> new UnsupportedPaymentMethodException())
.process(request);
}
}