|
This version is still in development and is not considered stable yet. For the latest stable version, please use Spring Shell 3.4.1! |
Command Registration
There are two different ways to define a command, through an annotation model and through a programmatic model:
-
In the annotation model, you define your methods in a
@Componentclass and the methods with specific annotations. -
In the programmatic model, you use a more low level approach, defining commands as beans.
Annotation-Based Registration
The @Command annotation marks a method as a candidate for command registration.
In below example a command example is defined.
class Example1 {
@Command(name = "example")
public String example() {
return "Hello";
}
}
| The command name optional, if not provided the method name will be used as command name. When the command returns a value, it will be printed to the shell output. |
Using a @Command will not automatically register command targets, instead it is required to use
@EnableCommand annotations. This model is familiar from other parts of Spring umbrella and
provides better flexibility for a user being inclusive rather than exclusive for command targets.
You can define target classes using @EnableCommand. It will get picked from all Configuration
classes.
@EnableCommand({ Example1.class, Example2.class })
class App {
}
@EnableCommand is not required in a Spring Boot application, as Spring Boot auto-configuration
will take care of that.
|
Programmatic Registration
In the programmatic model, commands can be defined as beans of type Command:
@Bean
Command myCommand() {
return Command.builder().name("mycommand").execute(context -> {
context.outputWriter().println("This is my command!");
});
}
You can also use the AbstractCommand class to simplify command definitions:
@Bean
Command myCommand() {
return new AbstractCommand("mycommand", "This is my command") {
@Override
public ExitStatus doExecute(CommandContext commandContext) {
println("This is my command!", commandContext);
return ExitStatus.OK;
}
};
}
AbstractCommand provides some utility methods to simplify command creation like
handling help options (-h and --help) and printing messages to the shell output.