@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 を使用できます。または他のエレガントな方法。
私はたくさん試しました。
プレースホルダーを使用します。必要に応じて.properties
@ComponentScan(basePackage="${scan.basePackage}")
ファイルの値を変更します。しかし、この方法では修正できませんexcludeFilters
。FilterType.ASSIGNABLE_TYPE
除外する必要があるクラスを割り当てるために使用する場合、使用する場合は ,where ではなく型にするvalue
必要があるためです。Class
String
value = {"${scan.excludeClass}"}
プログラマティックな方法。
/** * 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?
...
私は本当にたくさん試しましたが、まだ修正できません。だから私はあなたの助けが必要です。
私の下手な英語を許してください。
どうもありがとう、少なくともあなたは読むのに少し時間がかかりました.