2017-11-25 13 views
0

の間で異なっている何を、私は認識インタフェースを使用してSpringのオブジェクトを取得することができます:春に認識インターフェースと@Autowired

@Component 
class TestAware : ApplicationContextAware, EnvironmentAware { 
    override fun setEnvironment(environment: Environment) { 
     println("Server port" + environment.getProperty("server.port")) 
    } 

    override fun setApplicationContext(applicationContext: ApplicationContext) { 
     println("ApplicationContext" + applicationContext.displayName) 
    } 
} 

しかし、その後、私は@Autowiredを使用して同じことを行うことができます。

@Component 
class AutowiredTest { 
    @Autowired 
    fun constructor(env: Environment, appCtx: ApplicationContext) { 
     println("ApplicationContext From Autowired" + appCtx.displayName) 
     println(env.getProperty("server.port")) 
    } 

} 

その違いは何ですか?その場合、私はAwareを使用する必要がありますが、@Autowiredは使用しないでください。

答えて

1

伝統的に@Autowiredはコア依存性注入メソッドであり、コンストラクタでは、オブジェクトによって利用される必要なBeanを注入するのが好ましい。

認識すると、具体的には、ApplicationContextAwareはいを意味すると思いますか?これは、実装クラスが作成されたコンテキストを変更できるように、より高い視点のものです。全体の意味とアプローチは異なります。別のBeanの機能が必要な場合は、@Autowireを使用クラスに挿入します(注入します)。他のBeanをブートストラップするなど、コンテキストを操作する必要がある場合は、全体として注入されたものに基づいて意思決定を行い、これがAwareに使用されるアプローチになります。

私はマークを忘れましたか?

関連する問題