2017-11-15 9 views
-1

では動作しませんが、私のAppConfigです:@Autowiredはここでメソッドのパラメータ

@Configuration 
@EnableWebMvc 
@ComponentScan 
class AppConfig{ 
    @Bean("myname") 
    fun name(): Name = Name("Quang") 
} 

データクラス:

data class Name(val value: String ="") 

私のコントローラクラス:

@Controller 
@RequestMapping("/") 
class Main{ 
    @RequestMapping("/") 
    @ResponseBody 
    fun index(@Autowired @Qualifier("myname") name: Name): Name { 
     //this return "" 
     return name 
    } 
} 

結果は "" です"クワン"の代わりに。 しかし、今私はこのようなフィールドからそれを注入した場合、それが正常に動作します:

@Controller 
@RequestMapping("/") 
class Main{ 
    @Autowired(required = true) 
    @Qualifier("myname") 
    lateinit var name:Name 
    @RequestMapping("/") 
    @ResponseBody 
    fun index(): Name { 
     //this return "Quang" as expected 
     return name 
    } 
} 

私はドキュメントによると、メソッドのパラメータに

+1

これはハンドラメソッドです。これはリクエストを受け取ったときに呼び出され、Spring MVCはそのメソッドによって処理されることを意味していると判断します。 Spring MVCは '@ Autowired'を一切実行しません。いくつかのサポートされているパラメータ型(注釈付きのものもあります)もあります。これらは、仕様に記載されています。 –

+0

ドキュメントを読んだ後、これは本当にばかげた質問であることがわかりました:(。@Autowiredはフィールド、コンストラクタ、セッターメソッドで使用されることを意図しています。 – user2477

答えて

0

を、それを使用する場合@Autowiredが動作しません。だから、なぜあなたは説明することができます:

のように、コンストラクタ、フィールド、セッターメソッド、またはコンフィグレーションメソッドをマークし、Springの依存関係注入機能によって自動的にマークされます。

最初の例では、Springは何もautowireしません。

関連する問題