2011-04-29 3 views
2

注釈を使用して設定されたコントローラを備えた小さなMVCウェブアプリがあります。注釈を使用して自動配線できる春のBeanを作成するには?

xmlの設定は簡単です。

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context.xsd"> 

<context:component-scan base-package="net.dynamic_tools.jsdependency" /> 
</beans> 

私のコントローラは、私はタイプの一致するBeanが[net.dynamic_tools.jsdependency.view.ScriptTagsJSView]依存関係が見つかりません

を言って、エラーを取得しています

@Controller 
@RequestMapping("/*") 
public class JSDependencyController { 

    @Autowired 
    private ScriptTagsJSView scriptTagsJSView; 

のように見えます

私はコンポーネントの注釈をScrに追加しようとしましたitTagsJSView

@Component("scriptTagsJSView") 
public class ScriptTagsJSView implements View { 

運がない。私も

@Configuration 
public class Config { 
    @Bean 
    public ScriptTagsJSView getScriptTagsJSView() { 
     return new ScriptTagsJSView(); 
} 

を設定POJOを追加し、@Bean注釈を使用してみました私はおそらくかなり単純な何かが欠けているが、これは動作していない理由を私は見ることができません。何か案は?

+0

ScriptTagsJSViewはどのパッケージですか?コンポーネントスキャンベースパッケージは指定したパッケージからのみ下向きに検索するので、そのクラスがそのパッケージの外にある場合はスキャンされません。編集:下記の私の答えを参照してください、また、上記のコメントを検討してください。 – Jberg

+0

両方のご連絡ありがとうございます。努力を感謝します。問題は私がばかだということが分かりました。私が使用していると思ったxmlファイルは、実際に使用していたxmlファイルではありませんでした。実際に使用していたのは、net.dynamic_tools.jsdependpendency.controllerからスキャンしていたため、net.dynamic_tools.jsdependency.viewの注釈がありませんでした。 annotation-configは必要ではないようです。 –

+1

これをやりたい人は@Componentアノテーションを使っています。 @Configurationクラスと@Beanクラスを削除しました。 –

答えて

2

あなたのXMLには<context:annotation-config/>が必要なだけかもしれないと思います。

2

まず、アノテーション駆動のタグを使用します。 これは必ず春はまた、コンポーネント・スキャンを必要とするが、あなたはすでにそれを持っている @Controller、@Repository、@Serviceと@Component

<mvc:annotation-driven /> 

でアノテートすべてのクラスをインスタンス化するようになります。

春は種類に基づいて一致するため、Beanに名前を付けることを控えてください。 @Component( "scriptTagsJSView")ではなく@Componentを使用しないでください)

最後に、@Autowiredを注入する必要がある場所に追加する必要があります。 私は個人的に私はコンストラクタとの組み合わせでそれを使用します。

public class JSDependencyController { 
    @Autowired 
    public JSDependencyController(ScriptTagsJSView view){ 
     this.view = view; 
    } 
} 
関連する問題