2011-07-02 8 views
1

私はStruts2 + Spring + Hibernateで小さなアプリケーションを開発しています... Spring Beanはサーバの起動時に正しく注入されています。彼らは適切に注入しています。しかし、私はpostメソッドを実行し、postメソッド(struts2でexecute())を実行し、注入された値はnullです。なぜこれが起こるのですか?Springコンストラクタインジェクションがnullを示しています

豆注入は次のとおりです。

<bean id="userAction" class="com.example.user.action.UserAction"> 
     <constructor-arg index="0"> 
      <ref bean="UserServiceTarget"/> 
     </constructor-arg> 
</bean> 

私のStruts2のコンストラクタは次のとおりです。

public UserAction(IUserService userService) 
    { 
     this.userService=userService; 

    } 

Struts2の方法は次のとおりです。

public String execute() { 
     this.user=(User)userService.findById(this.id); 
} 

しかし、内部のメソッドUserServiceの値がnullの実行...とき私は彼らが充分に注入された注射する..

ありがとう...

+1

また、質問を編集して、完全なUserActionクラスと完全なコンテキストを追加できますか? – andyb

答えて

2

私はコンストラクタargsは、別のものに豆を排除する方法ではないと思います。私はあなたの例を与える:

applicationContext.xmlを:

<bean id="userAction" class="com.example.user.action.UserAction"/> 
<bean id="userServiceTarget" class="com.example.user.UserServiceTarget"> 

UserAction.java:

@Autowired 
private UserServiceTarget userService; 

あなたはまた、他の構成を使用することができます。たとえば :

<bean id="userAction" class="com.example.user.action.UserAction"> 
<property name="userService" ref="UserServiceTarget"/> 
</bean> 

Autowired注釈を必要としないこの方法では、唯一のセッター。

私はxmlがあまり好きではありません。そのため、Stereotype注釈を使用するのが最善の方法です。あなたは、あなたのサービスクラスに@Serviceアノテーションを使用することができますし、AppContextをしてBeanを宣言することを忘れすることができますが、この方法の2行を追加する必要があります

<context:annotation-config /> 

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

私が助けた希望を!

+0

ありがとうlepike ....それは正常に動作します...私の質問は私のコードで間違っています、私はコンストラクタの注入を使用しています... – Muthu

+0

ごめんなさい。私はあなたに回避策を与えました。あなたのコードに何が問題なのか分かりません。コンストラクタインジェクションも動作する必要があります。 UserServiceTargetのbean定義は何ですか?おそらく、Beanのidプロパティの名前を確認する必要があります。あなたが解決策を見つけることを願っています。 – lepike

関連する問題