Spring Shell Command 구현

개요

HelloWorldCommands 클래스를 통해서 Spring Shell 커맨드 구현 방법을 살펴 보겠습니다.

Marker interface

HelloWorldCommands는 org.springframework.shell.core.CommandMarker 인터페이스를 구현하고 있습니다.

@Component
public class HelloWorldCommands implements CommandMarker {

}

CommandMarker는 마커 인터페이스라서 커맨드 구현체라는 것을 알려주기 위해서 implements 할 뿐입니다. 따라서 구현할 메소드는 없습니다.
@Component annotation은 component-scan을 통해 bean으로 등록되라고 붙여 줬습니다.

CLI Annotation

HelloWorldCommands는 모두 3개의 annotation을 사용하여 쉘에서의 동작을 제어합니다.

CliAvailabilityIndicator

어떤 커맨드가 쉘에서 사용 가능한지를 알려주기 위해서 사용합니다. 이 annotation은 boolean 값을 반환하는 메소드에 붙이며, 이 메소드는 annotation에 명시한 커맨드의 사용 가능 여부를 반환합니다.
HelloWorldCommands에서는 hw simple, hw complex, hw enum 커맨드의 사용 가능 여부를 알려 주기 위해서 사용하였습니다.

    private boolean simpleCommandExecuted = false;

    @CliAvailabilityIndicator({"hw simple"})
    public boolean isSimpleAvailable() {
        //always available
        return true;
    }

    @CliAvailabilityIndicator({"hw complex", "hw enum"})
    public boolean isComplexAvailable() {
        if (simpleCommandExecuted) {
            return true;
        } else {
            return false;
        }
    }

위에서 isSimpleAvailable() 메소드는 언제나 true를 반환하여, hw simple 커맨드가 언제나 사용 가능하다고 알려주고 있습니다.
isComplexAvailable 메소드는 simpleCommandExecuted 변수의 상태에 따라서 hw complex, hw enum 커맨드의 사용 가능 여부를 알려줍니다.

신고