@valueインジェクションの問題が失敗します

1.構文を検出する最初のステップは、正しいです

@value(" $ {試験} " プライベート文字列の試験;

第二に2、そこには、コンフィギュレーション・ファイルを検出するように構成されている場合

URL =テスト
ユーザー名=ユーザー名
パスワード=パスワード

3.第3のステップは増加@Componentコメントかどうかを検出することです

春には、注釈バネの使用は、あなた自身がそれ以外の場合は、故障につながる、新しい、オブジェクトを管理するためのバネを使用する必要はありません。

@Component    // 春するオブジェクトをマネージクラス
のパブリック クラスDbUtils { 

    @value( "URLの$ {}" プライベート文字列のURL; 
    @value( "ユーザ名$ {}" プライベート文字列のユーザ名は、
    @value(「{$ }パスワード" プライベート文字列のパスワード; 

}

4.書き込みモード検出コードする第4の工程

もはや、コンストラクタで新しいオブジェクトの動作に参加しないでください。それ以外の場合は、@valueコメントが失敗した原因となります。(私は、このステップを踏んピットにあります)。

   初期コンテキストは、ノートを初期化するために使用することができ@PostConstruct、彼は一度だけ呼び出し、呼び出し、ばね負荷情報を終了します。

バリュー@ 5.静的プロパティに注入することはできません

コンテンツを注入することができない静的プロパティで直接使用@value !!!この方法は常にnullになります。

その理由は、
@valueは、静的プロパティの値に直接注入することがないことが判明した、春は/静的変数に注入された値をサポートしていないことはできません。スプリング支持し注入法では、我々は、非静的setterメソッドインジェクション静的変数を使用することができ、そしてクラスが@valueを使用する必要があります。 ...春を支払うためには@Autowiredが同じ注入しないことと同じように管理されている
詳細を:https://blog.csdn.net/sqlgao22/article/details/100100314

改善します

使用setterメソッドは、属性を割り当てるとsetterメソッドは静的を持つことができません

この方法のアイデアは、自動的に静的に生成されます、あなたは手動で削除する必要があります。

@Component    // オブジェクト管理の春にクラス
のパブリック クラスDbUtils { 

    プライベート 静的な文字列のURLを、
     プライベート 静的な文字列名;
     プライベート 静的な文字列のパスワード、

    @valueは、(「{$ URLは}」)   // 静的削除
    、公開 のボイド(てsetURLをURL文字列){ 
        DBUtils.url = URL; 
    } 
    @value( "ユーザ名$ {}" 公共 ボイドsetUsername(文字列名){ 
        DBUtils.username = ユーザ名; 
    } 
    @value("$ {パスワード}" 公共 ボイドするsetPassword(文字列のパスワード){ 
        DBUtils.password = パスワード。
    } 
    // 查看是否注入
    パブリック 静的 ボイドのget(){ 
        System.out.printlnは( "===== ===== URL" + URL); 
        System.out.println( "===== =====ユーザー名" + ユーザー名)。
        System.out.println( "===== =====パスワード" + パスワード)。
    } 
}

テスト

    @RequestMapping( "/取得" 
    @ResponseBody 
    パブリック文字列取得(){ 
        DBUtils.get()。
        リターンは、「GET」
    }

 

テスト出力後:


ここに画像を挿入説明


首尾よく属性を注入しました。

 

:への記事の転載https://blog.csdn.net/sqlgao22/article/details/100096348

おすすめ

転載: www.cnblogs.com/nhdlb/p/11741228.html