0

controller-config.xmlで構成するWebコントローラーがあります。

<mvc:annotation-driven />
<context:annotation-config />
<context:component-scan base-package="com.ecommerce.web.controller" />

コントローラには、以下のような@Controllerアノテーションがあります。

@Controller
public class HomeController

依存関係に@Autowiredアノテーションを含めましたが、アプリケーションを最初に起動したときに、ワイヤードオブジェクトにプロパティを設定できません。

たとえば、storeProfileオブジェクトがあり、デバッグモードのときに、複数のプロパティが適切に設定されていることがわかります。しかし、@ Autowried BeanにstoreProfileプロパティの1つを設定しようとすると、それはまだnullまたは空の文字列です!?

添付の画像を見ると、this.storeProfileContext.setStoreProfile(storeProf ile)の行を超えた後も、デバッガーはstoreProfileプロパティをnullとして表示していることがわかります。

実際には、作成されたように見えるいくつかの依存関係があります(それらはnullではなく、アプリケーション関数です)が、これらのオブジェクトには何も設定できません。

私はSpringフォーラムでも同じ質問をしました-これを理解することを望んでいます。

本当にありがとう!

デバッガーのスクリーンショット

Bean構成

4

2 に答える 2

1

これは、プロキシのフィールドを見ているためです。プロキシのフィールドは<aop:scoped-proxy/>、設定された値に対してゲッターを呼び出すと、プロキシされたオブジェクトから取得された正しい値が表示されるはずです。

于 2012-11-15T19:39:08.937 に答える
0

調べているインスタンスはCGLIBプロキシです。

CGLIBはBeanをサブクラス化し、すべてのメソッド呼び出しをターゲットBeanに委任します。

したがって、スーパークラスのフィールドはまだ存在しますが、使用されません。

于 2012-11-15T19:39:01.667 に答える