En tant que simple mécanisme de plug-in utilisant Spring, il peut être réalisé très facilement comme décrit ci-dessous.
Mécanisme de plug-in simple réalisé par conteneur DI https://blog.ik.am/entries/331
Ici, nous allons également considérer l'ordre dans lequel les bouchons sont appliqués. C'est très simple à faire, il suffit d'ajouter «@ Priority» pour définir l'ordre.
MyPlugin.java
public interface MyPlugin {
String execute();
}
MyPluginService.java
@Service
public class MyPluginService {
@Autowired
List<MyPlugin> plugins;
public List<String> execute() {
return plugins.stream().map(p -> p.execute()).collect(Collectors.toList());
}
}
PluginController.java
@RestController
public class PluginController {
@Autowired
MyPluginService myPluginService;
@GetMapping("plugins")
public List<String> plugins() {
return myPluginService.execute();
}
}
@Component
@Priority(10)
public class Fuga1Plugin implements MyPlugin {
@Override
public String execute() {
return "Fuga1Plugin";
}
}
@Component
@Priority(50)
public class Hoge1Plugin implements MyPlugin {
@Override
public String execute() {
return "Hoge1Plugin";
}
}
@Component
@Priority(100)
public class Fuga2Plugin implements MyPlugin {
@Override
public String execute() {
return "Fuga2Plugin";
}
}
@Component
@Priority(200)
public class Hoge2Plugin implements MyPlugin {
@Override
public String execute() {
return "Hoge2Plugin";
}
}
Résultat d'exécution
$ curl http://localhost:8080/plugins | jq .
[
"Fuga1Plugin",
"Hoge1Plugin",
"Fuga2Plugin",
"Hoge2Plugin"
]
À propos, à partir de Spring 4.1, il est recommandé d'utiliser @ Priority
au lieu de @ Order
.
De plus, si vous utilisez @ Conditionnel
, vous pouvez écrire les conditions applicables, mais il semble que vous n'aurez pas beaucoup d'occasions de l'utiliser.
Recommended Posts