JYaml으로 간편한 DI

5166 단어 자바YAML
본래, YAML 파서로서 이용되는 JYaml 를 사용해 간편 DI (의존성의 주입)를 시험해 보겠습니다.

의존성 주입 대상



우선, 의존성 주입처를 작성

Process.java

/**
 * 依存性注入用の I/F.
 */
public interface Process {
    public void process();
}


Configuration.java
/**
 * Yaml を読み込むクラス.
 */
public class Configuration {
    public Process p1;
    public Process p2;
    public Process p3;
}


실행 코드



이어서, 이것을 실행하는 메소드를 다음과 같이 정의

main.java

/**
 * テストメソッド.
 */
public static void main(String[] args) throws Throwable {

    Configuration configuration = Yaml.loadType(new File("configuration.yml"), Configuration.class);

    configuration.p1.process();
    configuration.p2.process();
    configuration.p3.process();
}


Yaml.loadType에서 YAML 파일을로드하는 동안 종속성이 주입됩니다.

구현 클래스 준비



그리고 Process I/F 를 구현한 클래스를 준비

StrPrinter.java

/**
 * 文字列を出力するクラス.
 */
public static class StrPrinter implements Process {
    public String str;

    @Override
    public void process() {
        System.out.println(str);
    }
}


NumberPrinter.java
/**
 * 数値を出力するクラス.
 */
public static class NumberPrinter implements Process {
    public Integer number;

    @Override
    public void process() {
        System.out.println(number);
    }
}


YAML 준비



종속성을 정의한 YAML 파일 준비

configuration.yml

p1: !StrPrinter
    str: 八 足す
p2: !StrPrinter
    str: Ⅱ は
p3: !NumberPrinter
    number: 10


실행



방금 전의 테스트 메소드를 실행하면 다음과 같이 결과가 출력된다.

실행 결과

八 足す
Ⅱ は
10



후기



Process I/F 의 구현 방법에 따라서 좀 더 여러가지 할 수 있습니다.
또, JYaml 를 사용하고 있으므로, 필드치의 추가도 간단하거나,
이번에는 인수없이 반환 값없이 쉽게 만들었지만,
제네릭스 등으로 각각 준비하면 더욱 폭이 넓어집니다.

안쪽이 깊네요

좋은 웹페이지 즐겨찾기