2016-11-01 2 views
1
@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を使用する必要があります 2つの@ComponentScan注釈があります。もちろん、Springでは許可されていません。私にとって、2つの異なる@ComponentScanは、アプリケーションを起動する2つの異なる方法を意味します。 CS1の使用を選択した場合(つまり、@ ComponentScan1を意味する)、私はCS2にコメントすることができます。逆もまた同様です。@ComponentScan dynamicの設定方法は?

エレガントで優雅ではありません。特に、春の初心者向けです。 私は自分の.propertiesファイルに応じて動的に設定することができますか?。私の.propertiesファイルの "isScanA"という名前のparamが純粋なので、私はCS1を使用できます。または他のエレガントな方法。

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

  1. プレースホルダを使用します。 @ComponentScan(basePackage="${scan.basePackage}")など。必要に応じて.propertiesファイルの値を変更します。しかし、この方法ではexcludeFiltersを修正することはできません。 FilterType.ASSIGNABLE_TYPEを使用して除外する必要があるクラスを割り当てると、valueは、の場合はStringではなく、Classタイプでなければなりません。

  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問題を解決することはできません私のメインfunction.Butでこのメソッドを呼び出したが、その理由はここにある:私は本当に試した

Doing context:component-scan programatic way?

...多くは、まだ修正することはできません。だから私はあなたの助けが必要です。

私の貧しい英語を許します、plz。

多くの場合、少なくともあなたは読んで少し時間がかかります。

+1

あなたもこれを行うにはしたくないのはなぜか?あなたが最初に修正してはいけないものを修正しようとしているように見えます。 –

+2

春のプロファイルを見てください:彼らはあなたが必要とするものとまったく同じように聞こえます –

+0

@ M.Deinum実際には、私は同じjvmで直接呼び出しとrpcシステムを置き換えようとしています。 CS2はrpc.AndによってサポートされているサービスBeanをロードする古い方法です.CS1は同じjvmで呼び出せるサービスBeanをロードする新しい方法です。私はちょうど開発者のために選択可能な2つの方法を作りたいと思っています。彼は、RPC方式または直接コールルの方法でアプリを起動することができます。それは彼が.propertiesファイルに設定した値に依存します。私はそれがコードのコメントよりも優雅だと思います。 –

答えて

4

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

ここでのドキュメントです:

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

+0

Thx。私はSpring Profileに関する文書を読んでいます。それは助けることができる、と思う。再びThx。 –

関連する問題