インタフェースの注釈で使用application.properties値

フェデリコ・ガッティ:

application.properties値は注釈宣言の内側、またはより一般的に内部で使用することができますInterfance例えば、私が持っています:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface EndLogging {
    String BusinessOperationName() default  "NOME_BUSINESSOPERATIONNAME_UNDEFINED";
    String ProcessName() default "NOME_MICROSERVZIO_UNDEFINED";
}

しかし、私は、メソッドによって返されたデフォルト値がapplication.properties値であることをしたい、何かが好き:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface EndLogging {
    String BusinessOperationName() default  @Value("${business.value}");
    String ProcessName() default @Value("${process.value}");
}
ジェスパー:

いいえ、これは(直接)ことはできません。

注釈プロパティのデフォルト値は、コンパイル時の定数でなければなりません。あなたから注入しようとしているという値は、application.propertiesコンパイル時定数ではありません。

あなたはどうすることができ、デフォルト値として特別なマーカー値を使用している、そして、あなたの注釈がこの特別なマーカー値を認識して、あなたがたとえば、あなたのプロパティファイルから取得した値を使用するプロセスの論理インチ

あなたがあなたの最初のバージョンを使用している場合たとえば、@EndLogging注釈、あなたはこの注釈を処理のSpring Beanを持つことになり、それは次のようになります。

// Class that processes the @EndLogging annotation
@Component
public class SomeClass {

    @Value("${business.value}")
    private String defaultBusinessOperationName;

    @Value("${process.value}")
    private String defaultProcessName;

    public void processAnnotation(EndLogging annotation) {
        // ...

        String businessOperationName = annotation.BusinessOperationName();
        if (businessOperationName.equals("NOME_BUSINESSOPERATIONNAME_UNDEFINED")) {
            businessOperationName = defaultBusinessOperationName;
        }

        String processName = annotation.ProcessName();
        if (processName.equals("NOME_MICROSERVZIO_UNDEFINED")) {
            processName = defaultProcessName;
        }

        // ...
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=225769&siteId=1