如何上传不同的上下文配置class?

How to upload different context configuration class?

同学们,我的主要 class 看起来像:

public class App {

    static final Logger LOG = Logger.getLogger(App.class.getName());

    public static void main(String[] args) {


        for(int i = 0; i < args.length; i++) {



            switch (args[i]) {
                case "OrderUpload":
                    ApplicationContext ctxOrderUpload =  new AnnotationConfigApplicationContext(AppConfigBasic.class);
                    OrderUpload OrderUpload = ctxOrderUpload.getBean(OrderUpload.class);
                    OrderUpload.process();
                    break;
                case "TrdUpload":
                    ApplicationContext ctxTrdUpload = new AnnotationConfigApplicationContext(AppConfig.class);
                    TrdUpload TrdUpload = ctxTrdUpload.getBean(TrdUpload.class);
                    TrdUpload.process();
                    break;
                default:
                    LOG.info("Process is not defined - > " + args[i]);
                    System.exit(0);
            }

        }
 }

我有两个配置 classes:

@Configuration
@EnableTransactionManagement
@ComponentScan

public class AppConfigBasic {}

和扩展配置

@Configuration
@EnableTransactionManagement
@ComponentScan

public class AppConfig extends AppConfigBasic {}

为什么执行 java -jar app.jar OrderUpload Spring 时也会从 AppConfig 加载 bean(不仅从 AppConfigBasic`)? 两个如何在 switch 的不同情况下使用不同的上下文配置文件? 谢谢。

因为你的 @ComponentScanAppConfigBasic - 它应该包括你的 AppConfig (不要忘记 @ComponentScan 也在扫描 @Configuration beans ).

在您的 @ComponentScan 中更加具体,不要包含您的 AppConfig 或替代方案(可能更可取)使用 @ComponentScan excludeFilters functionality.