Один из примеров расширяемого клиентского приложения на основе Spring можно построить с использованием функционального программирования и инъекции зависимостей.
Вот пример кода:
1. Создайте интерфейс `BusinessLogic`, который представляет основную бизнес-логику вашего приложения:
```java
public interface BusinessLogic {
String process(String input);
}
```
2. Реализуйте основную имплементацию этого интерфейса:
```java
@Component
public class DefaultBusinessLogic implements BusinessLogic {
@Override
public String process(String input) {
return "DefaultBusinessLogic: " + input;
}
}
```
3. Создайте клиентский класс, который будет использовать `BusinessLogic`. Внедрите зависимость с помощью аннотации `Autowired`:
```java
@Component
public class Client {
private final BusinessLogic businessLogic;
@Autowired
public Client(BusinessLogic businessLogic) {
this.businessLogic = businessLogic;
}
public void doSomething() {
String result = businessLogic.process("Hello");
System.out.println(result);
}
}
```
4. Теперь давайте предоставим возможность клиенту заменить `BusinessLogic`. Создайте новую реализацию `BusinessLogic`:
```java
@Component
public class ExtendedBusinessLogic implements BusinessLogic {
@Override
public String process(String input) {
return "ExtendedBusinessLogic: " + input;
}
}
```
5. Теперь мы можем настроить, какая реализация `BusinessLogic` будет использоваться, путем использования аннотации `Primary` или аннотации `Qualifier`. В классе конфигурации или в классе приложения можно использовать аннотацию `Primary` для указания основной имплементации:
```java
@Configuration
public class AppConfig {
@Bean
@Primary
public BusinessLogic defaultBusinessLogic() {
return new DefaultBusinessLogic();
}
}
```
6. Или мы можем использовать аннотацию `Qualifier` при инъекции зависимости в `Client`, чтобы указать, какая реализация должна быть использована:
```java
@Component
public class Client {
private final BusinessLogic businessLogic;
@Autowired
public Client(@Qualifier("extendedBusinessLogic") BusinessLogic businessLogic) {
this.businessLogic = businessLogic;
}
public void doSomething() {
String result = businessLogic.process("Hello");
System.out.println(result);
}
}
```
Теперь, в зависимости от настроек в коде конфигурации или классе приложения, клиент будет использовать либо `DefaultBusinessLogic`, либо `ExtendedBusinessLogic`.
Надеюсь, этот пример поможет вам создать расширяемое клиентское приложение на основе Spring.