2016-08-31 14 views
11

私はSpring Frameworkについて学んでいますが、正確には@Configurationの注釈の意味と注釈を付けるべきクラスを理解できません。 Springブートのドキュメントでは、Applicationクラスは@Configurationクラスでなければならないと言われています。なぜSpring起動アプリケーションクラスに@Configurationアノテーションが必要なのですか?

スプリングブートはJavaベースの設定を優先します。 はXMLソースでSpringApplication.run()を呼び出すことができますが、一般的に は、主なソースが@Configurationクラスであることをお勧めします。学ぼうと

について@Configuration私は@Configurationを持つクラスをアノテートするクラスは、Bean定義のソースとして春のIoCコンテナで使用できることを示していることがわかります。

もしそうなら、このアプリケーションクラスはどのようにBean定義のソースですか?

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan 
public class App 
{ 
    public static void main(String[] args) throws Exception { 
     SpringApplication.run(App.class, args);  
    } 
} 

私はかなりの春に関する他のほとんどの基本的な概念を理解しているが、私は@Configurationの目的を理解することはできませんか、どのクラスが@Configurationクラスすべきですか?誰かが助けてくれますか?ありがとう!!

答えて

18

あなたは正しく理解しました。

@Configuration

@Configuration XMLファイルの類似体です。そのようなクラスは、@Bean注釈を使用してメソッドを定義することによってBean定義のソースです。

@Configurationは次のとおりです。SpringApplication.run()メソッドを呼び出すときにすでにsourcesパラメータで注釈付きクラスを渡すと、を

  • 必要はありません。
  • 注釈付きクラスを明示的に渡すのではなく、主構成クラスの@ComponentScan注釈で指定されたパッケージに含まれている場合。

は読みやすくするために、明示的にもsourcesとして渡されたクラスはとにかく@Configurationでアノテートすることができる - ちょうどより明確に意思を表示します。

あなたの現在のクラスは実際にはBean定義のソースではありません。これは何もありませんが、@Beanの注釈付きメソッドがあれば、Springはそれを見ます。

@EnableAutoConfiguratiom

付きまたは@Configurationせずに使用することができます。クラスパスにあるもので判断するためにSpringに基本的なインフラストラクチャを設定するよう伝えます。これは、に含まれる@Import注釈の値から派生した、いわゆるインポートクラスを呼び出すことによって行われます。 1つのクラスに@EnableAutoConfigurationという注釈を付ける必要があります。複製は何もしません。

この答えはまた春のブート初期化プロセスを理解するのに役立つかもしれない:Which piece of code in Spring Boot actually registers dispatcher servlet for SpringMVC?

+0

迅速かつ明確な答えをありがとう。今はたくさんの意味があります。この場合、この注釈はオプションですか?実際、私はこの注釈がSpring Securityなどで少し乱用されているのを見ていますが、SecurityConfigクラスにはBeanがないのに@Configurationで注釈が付けられています。http://docs.spring.io/spring-security/site/ docs/3.2.x/guides/helloworld.html – varunkr

+1

あなたはそうです。自動スキャンする必要がない限り、これはオプションです(私の更新された回答を参照)。これはSecurityConfigの場合です。自動スキャンする場合に備えて注釈を付けました。 –

+0

@ArtemNovikovあなたのアプリケーションがフルスプリングブートアプリケーションであることをいつ、どのように検討/知ることができますか? – Jesse

6

私は春ブーツの@SpringBootApplication注釈が自動的に@Configurationを適用する主な理由は、非常に同じクラスにBean定義を追加できるようにすることだと思います。 Spring Bootの主な目標の1つは、余分な動きをせずにアプリケーションを高速に作成できるようにすることです。したがって、Bean定義をアプリケーションのクラスに追加できるようにすることで、構成を保持するために余分なクラスを作成する必要はありません。あなたはクラスが1つだけで、それだけです。

関連する問題