@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
. Как вы можете видеть, я должен использовать Annnotation, а не xml. Есть две @ComponentScan
аннотации. И это, конечно, запрещено для Весны. Для меня два разных @ComponentScan
означают два разных способа запуска моего приложения. И если я решила использовать CS1 (это означает @ ComponentScan1), я хотел бы прокомментировать CS2 и наоборот.Как настроить динамику @ComponentScan?
Это не элегантный или изящный. Особенно для тех, кто новичок на весне. Итак, мне интересно узнать, как я могу настроить его динамически в соответствии с моим файлом .properties. Такой же параметр, как и в моем файле .properties под названием «isScanA», я могу использовать CS1. Или любой другой элегантный способ.
Я пробовал много.
Используйте заполнитель. Например,
@ComponentScan(basePackage="${scan.basePackage}")
. И при необходимости измените значение в файле .properties. Но этот способ не может исправитьexcludeFilters
. Потому что, если я используюFilterType.ASSIGNABLE_TYPE
для назначения класса, который должен быть исключен,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(); }
Я назвал этот метод в моем главном function.But он также не может исправить excludeFilters
проблемы, причина здесь: Doing context:component-scan programatic way?
...
Я действительно пытался много, но все еще не могу исправить. Поэтому мне нужна твоя помощь.
Простите мой бедный английский, плз.
У вас много времени, по крайней мере, вы потратили немного времени на чтение.
Почему вы хотите, чтобы даже сделать это? Похоже, вы пытаетесь исправить то, что вам не следует исправлять в первую очередь. –
Посмотрите на профили пружин: они звучат точно так же, как вам нужно –
@ M.Deinum На самом деле, я пытаюсь заменить систему rpc на прямой вызов в том же jvm. CS2 - это старый способ загрузки сервисного компонента, который поддерживается rpc.And. CS1 - это новый способ загрузки компонента сервиса, который можно вызвать в одном и том же jvm. Я просто хочу сделать два варианта для разработчика. Он может запустить приложение в режиме rpc или прямое calll.Это зависит от значения, которое он задал в файле .properties. Я думаю, что это более грациозно, чем комментировать коды. –