[JAVA] Mécanisme de plug-in simple dans Spring, considérez également l'ordre

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

Mécanisme de plug-in simple dans Spring, considérez également l'ordre
Installez le plug-in dans Eclipse
Utiliser le plugin Findbugs dans Eclipse
La validation de printemps était importante dans l'ordre de Form et BindingResult
Ordre de traitement dans le programme
Spring Autowired est écrit dans le constructeur
Entrée de la console en Java (comprendre le mécanisme)
[Order method] Définit l'ordre des données dans Rails
Afficher la tâche Gradle dans le projet Spring Boot