私は、Spring Beanにアクセスして、イベントを発生させ、Spring Beanによって観察されるようにするために、Spring以外で作成されるクラスのインスタンスを持っています。私はSpring Webを使用していないので、私のアプリケーションはSpringブートを介してコマンドラインから実行されています。スプリングブートアプリケーション - 静的コンテキストからBeanを取得
答えて
あなたは豆春コンストラクタによって注入することができ、何かのように:
は@Service
class Bean {
...
}
class NotBean {
private Bean bean;
public NotBean(Bean bean) {
this.bean = bean;
}
// your stuff (handle events, etc...)
}
あなたが持っている唯一のオプションは、静的メソッドを使用して、アプリケーションのSpringコンテキストを公開することですようで管理されていないオブジェクトSpringはそれを使用して、必要なマネージドBeanへの参照を取得できます。
コンテキストのラッパーで開始します。コンストラクタ内のコンテキストへの参照を必要とする通常のマネージドBeanを作成します。春によって管理されていないオブジェクトにコンテキストへのアクセスを取得し、メソッドを使用してBeanへの参照を取得するために、静的なゲッターを使用し
@Service class ContextWrapper { private static ApplicationContext context; @Autowired public ContextWrapper(ApplicationContext ac) { context = ac; } public static ApplicationContext getContext() { return context; } }
:参照は、静的ゲッターを持つ静的クラスのフィールドに割り当てられ、コンテキストで利用できる:あなたが必要
SomeBean bean = ContextWrapper.getContext().getBean("someBean", SomeBean.class); // do something with the bean
最後には、非管理対象オブジェクトへのSpring Beanからの通信チャネルです。例えば、
SomeBean
は、管理されていないオブジェクトをパラメータとして受け入れ、将来の使用のために参照をフィールドに格納するセッターを公開することができます。オブジェクトマストは、前述の静的コンテキストアクセサを使用してマネージドBeanへの参照を取得し、その存在をBeanに認識させるためにセッターを使用します。@Service class SomeBean { // ... your bean stuff private SomeClass someclass; public void setSomeClass(Someclass someclass) { this.someclass = someclass; } private void sendEventToSomeClass() { // communicate with the object not managed by Spring if (someClass == null) return; someClass.sendEvent(); } }
コンテキストがヌルでないか完全にロードされていないことを確認するにはどうすればよいですか? getContext()が完全なスプリングコンテキストを返し、その理由を頼りにすることはできますか? – user7294900
Springアプリケーションが起動している場合は、コンテキストを正しく作成する必要があります。あなたが覚えておかなければならない唯一のことは、bean構築がコンテキスト作成の一部であるので、あなたのbeanのコンストラクタで 'getContext()'メソッドを使うべきではないということです。 –
**通常の(非春)クラス**からBeanを取得する場合、春のコンテキストはすでに開始されていると仮定できますか?春のコンテキストがnullでないか、または完全にロードされていないことを確認するためにチェック/関数を追加する必要がありますか? – user7294900
- 1. getclass()。getResource()を静的コンテキストから取得する方法?
- 2. 静的コンテキストからリソースを取得する
- 3. freemarkerマクロのコンテキストからspring beanを取得するには?
- 4. 静的テーブルビューからヘッダータイトルを取得
- 5. 静的メソッドからアプリケーションインスタンスを取得
- 6. 静的コンテキストでクラスのロガーを取得するには?
- 7. 静的コンテキスト警告
- 8. 非静的フィールドは静的、コンテキストMainメソッド
- 9. Java非静的メソッドplay静的コンテキストからcompleteCompletelyを参照できません
- 10. java:非静的変数を静的コンテキストから参照できないError
- 11. 非静的メソッドencode(byte [])は静的コンテキストから参照できません
- 12. 非静的メソッドannotは静的コンテキストから参照されます
- 13. エラー: "非静的メソッドtoString()は、静的コンテキストから参照できません"
- 14. 静的コンテキストからの非静的メソッド[クラスインスタンスの2つのセットの比較]
- 15. 静的メソッドgetChildFragmentManager()は静的コンテキストから参照できません
- 16. 非静的メソッドは**静的コンテキスト**から参照できません。静的コンテンツとは何ですか?
- 17. 静的メモリリーク(コンテキストあり)
- 18. 静的TableView NSRangeExceptionを取得
- 19. GenericFacesPortletからセッションスコープBeanを取得
- 20. アプリケーションコンテキストからBeanタイプのリストを取得
- 21. Grails:フロースコープからBeanを取得する
- 22. SpringとJSFでセッションBeanを取得するための静的クラス
- 23. Yii2:コントローラー以外の静的コンテキストからリダイレクトを実行
- 24. 外部コンテキストからプロパティデータを取得
- 25. NativeActivityからコンテキストを取得する
- 26. ActionFilterAttributeコンテキスト内からCookieを取得
- 27. リクエストスコープのCDI BeanからセッションスコープのCDI Beanへのアクセスを取得
- 28. jersey.servlet.ServletContainerマネージドBeanからSpringマネージドBeanを取得する方法?
- 29. なぜ「静的でない変数から静的なコンテキストから参照できないのですか?」
- 30. mysqlが "java.sql.SQLNonTransientConnectionException"を取得するスプリングブートアプリケーション
私は他のNotBeanがインスタンス化されるか、そのため、私は単にそれをBean参照を渡すことはできません上のコントロールを持っていない... – Walter
あなたはそのNotBeanから延長することはできますか? –