2
@ComponentScan(  //CS1
    basePackages = {"com.package.A", "com.package.B"},
    excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,
                                           value = {com.Package.A.SomeClass.class
                                           })
)

@ComponentScan(  //CS2
    basePackages = { "com.package.A"}
)
@EnableAutoConfiguration
@SpringBootApplication
public class Application {
  public static void main(String[] args) throws Exception {
    ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);
  }
}

上記は私SpringBootApplicationのメインクラスです。ご覧のとおり、xml ではなく Annnotation を使用する必要があります。Annotationsは 2 つあります@ComponentScan。もちろん、Spring では許可されていません。私にとって、この 2 つの違い@ComponentScanは、アプリケーションを起動する 2 つの異なる方法を意味します。また、CS1 (@ComponentScan1 を意味します) を使用することを選択した場合は、CS2 にコメントする必要があり、その逆も同様です。

エレガントでも優雅でもありません。特に春の初心者向けです。したがって、.properties ファイルに従って動的に構成する方法を知りたいのですが、「isScanA」と呼ばれる .properties ファイルのパラメーターなど、CS1 を使用できます。または他のエレガントな方法。

私はたくさん試しました。

  1. プレースホルダーを使用します。必要に応じて.properties@ComponentScan(basePackage="${scan.basePackage}")ファイルの値を変更します。しかし、この方法では修正できませんexcludeFiltersFilterType.ASSIGNABLE_TYPE除外する必要があるクラスを割り当てるために使用する場合、使用する場合は ,where ではなく型にするvalue必要があるためです。ClassStringvalue = {"${scan.excludeClass}"}

  2. プログラマティックな方法。

    /**
     * Create a new AnnotationConfigApplicationContext, scanning for bean definitions
     * in the given packages and automatically refreshing the context.
     * @param basePackages the packages to check for annotated classes
     */
    public AnnotationConfigApplicationContext(String... basePackages) {
        this();
        scan(basePackages);
        refresh();
    }
    

メイン関数でこのメソッドを呼び出しましたが、excludeFilters問題を解決することもできません。理由は次のとおりです: Doing context:component-scan programatic way?

...

私は本当にたくさん試しましたが、まだ修正できません。だから私はあなたの助けが必要です。

私の下手な英語を許してください。

どうもありがとう、少なくともあなたは読むのに少し時間がかかりました.

4

1 に答える 1

4

多分あなたはSpringのプロフィールを探しています!Spring プロファイルを使用すると、構成と Bean のプロファイルを決定できます。2 つのプロファイルを持つには、構成クラスを分離する必要があると思います。それらの例を見てみましょう!

ドキュメントは次のとおりです。

http://docs.spring.io/autorepo/docs/spring-boot/current/reference/html/boot-features-profiles.html

于 2016-11-01T12:19:56.973 に答える