春@Autowired注入はnullです

理由

  1. そのような注釈をオンにするスキャンドライバ、登録噴射アセンブリとして削除設定、;
  2. 注入されていない、春のコンテナ管理からオブジェクトを作成するために、新しいキーワードを使用します。
  3. 注射静的変数は、静的変数は、属性/オブジェクト・クラスは、変数ではなく、クラス属性は、ばねは、注射のレベルに基づいて、オブジェクトに依存しています。

直接コードを知っています

 

 

 

次の3つの方法の静的注入

従属オブジェクトサービスレイヤとすることができるいくつかのツールでは、ツールは、一般的に使用される静的メソッドは、対応するメンバ変数が直接使用は、依存性注入を@Autowired場合は、この時点で、静的として宣言する必要があり、メソッド呼び出しときNullPointerExceptionが報告されます。

@Autowired
 プライベート 静的 AdvancedDatastore dsForRW。

この状態で、注射に頼ることができない、dsForRWを試すことができ、それは例外java.lang.NullPointerExceptionが実行を投げるだろう、なぜ?静的変数/クラス属性変数は、オブジェクトが、クラスの属性ではありません、春ですこれは、注入のレベルに基づいてオブジェクトに依存しています。
しかし、それはより多くのパッケージングツールのようだった、とコンポーネントが@Componentコメントで成功することができますが、機能部品の方法は、一般的に静的メソッドで、静的メソッドは、静的メンバ変数を呼び出すことができますので、以下の問題があります。時々 、パッケージのシールは、機能性成分は、それを行う方法を、根本的なサービスを注入する必要があるでしょうか?
簡単にいくつかの実装をまとめると、次の解決策を検索するためのオンライン行きます。

達成する1.xmlの方法
これは、WEBのXML構成に基づいてプロジェクトのために右である; 

< ID = "mongoFileOperationUtil" クラス= ".. COM * * MongoFileOperationUtil"。INIT-メソッド= "INIT" > 
    < プロパティ= "dsForRW" REF = "dsForRW" /> 
</ > 
1。
2 
3。
パブリッククラスMongoFileOperationUtil { 
    
    プライベート静的AdvancedDatastore dsForRW; 
 
    プライベート静的MongoFileOperationUtil mongoFileOperationUtil; 
 
    公共ボイドのinit(){ 
        mongoFileOperationUtilこれを=; 
        mongoFileOperationUtil.dsForRW = this.dsForRW。
    }
 
}

2 @ PostConstruct方式实现。
輸入org.mongodb.morphia.AdvancedDatastore。 輸入org.springframework.beans.factory.annotation.Autowired; @Component パブリック クラスMongoFileOperationUtil { @Autowired プライベート 静的AdvancedDatastore dsForRW。 プライベート 静的MongoFileOperationUtil mongoFileOperationUtil。 @PostConstruct 公共 ボイドのinit(){ mongoFileOperationUtil = この; mongoFileOperationUtil.dsForRW = この.dsForRW。 } }

(@ PreDestroyアノテーションが定義され、容器を破壊する動作の前に行われた);メソッド@PostConstruct注釈、すなわちコンストラクタをロードした後、ローディングクラスのコンストラクタの後にinitメソッドが実行され
、このようにして、XML INITに配置します-method Destoryは、方法と類似の方法、初期豆容器と破壊前に作られたばね容器の操作の定義。

 
 
 

3 @Autowired注釈を追加し、@Componentクラスを追加する注釈は、メソッドを定義します.SET

インポートorg.mongodb.morphia.AdvancedDatastore; インポートorg.springframework.beans.factory.annotation.Autowired; インポートorg.springframework.stereotype.Component; @Component パブリック クラスMongoFileOperationUtil { プライベート 静的AdvancedDatastore dsForRW; @Autowired 公共 ボイドsetDatastore(AdvancedDatastore dsForRW ){MongoFileOperationUtil.dsForRW = dsForRW;} }最初の春AdvancedDatastoreはBeanをスキャンすることができ、その後、セッターメソッドを介して注入;及び注:@Autowiredメンバ変数に注釈を追加する必要がありません。

 

おすすめ

転載: www.cnblogs.com/weibanggang/p/11373243.html