理由
- そのような注釈をオンにするスキャンドライバ、登録噴射アセンブリとして削除設定、;
- 注入されていない、春のコンテナ管理からオブジェクトを作成するために、新しいキーワードを使用します。
- 注射静的変数は、静的変数は、属性/オブジェクト・クラスは、変数ではなく、クラス属性は、ばねは、注射のレベルに基づいて、オブジェクトに依存しています。
。
直接コードを知っています
次の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メンバ変数に注釈を追加する必要がありません。