を実装: -春のブートストラップクラスを注釈と注釈私は、次のような何かをしたい他の場所
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyCustomAnnotation {
public String field1();
public String[] list1();
}
@SpringBootApplication
@MyCustomAnnotation(field1 = "value1", list1 = { "list value 1", "list value2" })
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
}
public class AnnotationImplementationClass {
// Inject field1 and list1 values from @MyCustomAnnotation into this class
private String field1;
private String[] list1;
}
私はパッケージとカスタムを配布することができるように注釈付きクラスからAnnotationImplementationClassを隔離したいです開発者は@MyCustomAnnotationを使用して独自のスプリングブートアプリケーションクラスに注釈を付けることができます。
私は春のブートクラス(この場合はApplication.java)のクラス名を知らないので、このクラスにアクセスすることはできません。私は何とか実行時にアクセスする必要があるので、リフレクションを使用してカスタム注釈内の値を取得することができます。
BeanPostProcessorの使用を実証しようとした例を調査しましたが、@ MyCustomAnnotationが@SpringBootApplicationを含むJavaクラスに適用されているときにその場所を特定できませんでした。
ClassPathScanningCandidateComponentProviderを使用して、@ MyCustomAnnotationで注釈付けされたクラスを検索し、クラスに存在する他の宣言済み注釈を取得することもできます。 – Barath
バラットありがとう、これはかなり良い提案です、私はそれでいくつかの成功を収めていました。ただし、ClassPathScanningCandidateComponentProviderでは、スキャンを実行するための開始点としてbasePackageが必要です。残念ながら、ブートストラップクラスの名前を知らないという私の指定された制約は、特定のパッケージまたはサブパッケージにあるそのクラスに依存できないことを意味します。すべてのパッケージをスキャンすることは、処理のオーバーヘッドのために実行可能なオプションでもありません。 – Codesnooper
ClassPathScanningCandidateComponentProviderには、注釈付きの型を検索してブートストラップクラスを見つけるためのフィルタを追加できる多くのオプションが用意されています。 – Barath