2017-03-21 1 views
1

mongoDBとのテスト統合のためにいくつかのコードを書いています。私が読んだものから注釈componentscan、autoconfiguration、configuration、springbootapplicationを使わずにスプリングブートアプリケーションを起動することはできますか?

https://github.com/siva54/simpleusercontrol/blob/master/src/main/java/com/siva/UserManagementApplication.java

、以下この春ブートアプリケーションを実行するための主な方法へのリンクを見つけてください、アプリケーションは、アプリケーションがどのように管理するかを宣言するために、次のURLから構成のいずれかを含める必要がありますコンテキストは、

http://docs.spring.io/autorepo/docs/spring-boot/current/reference/html/using-boot-using-springbootapplication-annotation.html

私はしかし、私のアプリケーションが正常に動作し、私は何の問題もなくそれを実行することができるよ、これらのコンテキストのいずれかを使用していません。私はここに何かを逃していますか私のアプリケーションがどのようにコンテキスト/依存関係を自動的に開始して管理できるかについての情報をお手伝いできますか?事前に

おかげ

答えて

5

@SpringBootApplication@Configuration@EnableAutoConfiguration@ComponentScanのと同じです。この3つの注釈のいずれも使わずにアプリケーションが動作する理由を考えてみましょう。

それは@Configurationなしで動作理由:

春がパッケージをスキャンするとき、それは@Configurationでマークされたすべてのクラスを見つけ、構成の一部としてそれらを使用します。

SpringApplication.run(UserManagementApplication.class, args); 

ので、春がスキャンすることにより、このクラスを見つける必要がありません。しかし、次の行に手動で構成ソースとしてUserManagementApplicationを可決しました。そのため、それを@Configurationでマークする必要はありません。


それは@ComponentScanなしで動作理由:

クラスUserManagementApplication@ImportResource("classpath:spring/application-context.xml")注釈を持っています。つまり、ファイルspring/application-context.xmlが設定に含まれます。あなたは既にxmlファイルでそれを宣言しているため

<context:component-scan base-package="com.siva.*" /> 

だから、あなたは、スキャンパッケージの使用注釈を必要としない。そして、このファイルには、次の行が含まれています。


それが動作する理由

@EnableAutoConfigurationなし:

この注釈は、推測を試してみて、コンポーネントを自動的に設定するには、春にできます。あなたはbuild.gradleで次の依存関係が含まれている場合たとえば、:

dependencies { 
    compile 'org.springframework.boot:spring-boot-starter-data-mongodb' 
} 

春は自動的にMongoDBで動作するために必要なすべてのコンポーネントを構成します。 aplication.proprtiesファイルでホストとユーザー/パスを指定するだけで十分です。

しかし、spring/application-context.xmlファイルに必要なすべてのBeanを手動で宣言することをお勧めしました。だから、あなたは単に@EnableAutoConfigurationアノテーションを全く必要としません。

+0

この情報は多くの役に立ちます。ありがとう。 – daemon54

関連する問題