3

メインのスプリング ブート プロジェクトと、@Contollers、@Services などを含む 2 番目のスプリング プロジェクトの 2 つのプロジェクトがあります。

メインプロジェクトでこのサービスのいくつかを使用しようとしています。hereherehere 、および他の多くのような同様の質問を見ましたが、うまくいきません

1)私がちょうど持っている場合

@SpringBootApplication
public class App { ... }

2番目のプロジェクトからサービスが見つからないため、コンパイルされません

2) 2 番目のパッケージをスキャンしようとすると

@SpringBootApplication
@ComponentScan("secondPackage")
public class App {}

その後、アプリケーションはエラーなしで起動しますが、コントローラーのマッピングはまったく機能しません。両方のプロジェクトからのマッピングを解決できません。

3)次に、2番目のパッケージからコントローラーを除外しようとしましたが、コントローラーは必要ないため、マッピングはまだ機能しません

@ComponentScan(basePackages="secondPackage", excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = Controller.class)})

4)次に、特定のサービスをスキャンしようとしましたが、この場合、他のリソースが利用できず、多くのパスを含める必要があります

@ComponentScan({"first package", "second package"})

5) 最後に、2 つの構成ファイルを作成しようとしました

@Configuration
@ComponentScan(basePackages = {"mainPackage"})
public class MainConfiguration {

}

@Configuration
@ComponentScan(basePackages="secondPackage", 
        excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = Controller.class)})
public class SecondConfiguration {

}

しかし、SpringApplication.run(App.class, args); の前にコンテキストを準備する方法の例が見つかりませんでした。そして、私のコンテキストでアプリを実行します。お気に入り

ApplicationContext myContext = new AnnotationConfigApplicationContext(OrderStatusConfiguration.class, ShopRuServicesConfiguration.class);
SpringApplication.run(App.class, myContext, args);

では、なぜマッピングが機能しないのか、または 2 番目のプロジェクトから自動配線サービスを適切に行うにはどうすればよいのか、アドバイスをください!

どんな助けにも感謝します!ありがとう!

4

1 に答える 1

1

1) 空の注釈は、デフォルトのコンポーネント スキャンをトリガーします。これは、注釈付きクラスのパッケージから始まります

@SpringBootApplication
public class App { ... }

あなたが言うよりも、コンパイルさえしません。

これは、Spring 構成が、クラスパスにないいくつかのクラスを名前で参照することを意味します。

2) @ComponentScan を追加すると、1) のデフォルト コンポーネント スキャンは実行されず、代わりに「secondPackage」から始まるスキャンのみが実行されます。

@SpringBootApplication
@ComponentScan("secondPackage")
public class App {}

あなたが書くより

マッピングがまったく機能しない

これは、コントローラーがスプリング構成にまったく含まれていないことを意味する場合があります。

これを解決するには、試してみてください

@SpringBootApplication
@ComponentScan({"package of App","secondPackage"})
public class App {}

2)から期待した結果が得られる場合があります

これが機能しない場合は、参照されているプロジェクトで、アプリで必要なものだけを構成する Java 構成クラスを作成することをお勧めします。

@Import を使用して、これらの構成をインポートします。このようにして、アプリ内の構成クラスを参照し、クラスパスが正しく構成されていることを確認します。

アプリがまだサービスとマッピングを正しく構成していない場合は、必要なスプリング コンテキストが正確に得られるまで、参照されている構成を微調整できます。

于 2017-02-18T11:06:20.460 に答える