0

Springによって管理されていないアプリケーション内の深いレイヤーにあるSpringコンポーネントにアクセスするための最良の方法(またはオプション)は何ですか?

たとえば、@Controllersがあるとします。Springによって管理されていないPOJOを介した抽象化のいくつかのレイヤーを介して、それらの@Controllersは、@Serviceを注入する必要があるPOJOを使用することになります。

1つのオプションは、すべてのレイヤーをスプリングコンポーネントに組み込むことですが、それは、スプリングを強制的に支援するためにデザインをハッキングしているようです。私はいくつかの複雑なことが起こっていますが、すべてを@Autowireしなければならない場合、それほどきれいにはなりません。別のオプションは、低レベルクラスのコンポーネントを手動で注入することかもしれませんが、これが可能かどうか、または正しい解決策かどうかはわかりません。

4

1 に答える 1

2

元の質問に答えるという精神で、低レベルの非SpringクラスにApplicationContextAwareを実装させてApplicationContextにアクセスし、ApplicationContextを使用して任意のSpringBeanにアクセスできるようにすることができます。(サンプルコードを見つけるために「春のアプリケーションコンテキストアウェア」でグーグル検索)

ただし、ここで全体像に取り組むという精神では、最初からこの質問にはいくつかの問題があります。1つは、低レベルのコンポーネントに注入したい高レベルのコンポーネントがあるように思えます。通常は、デザインを逆にしたいと考えています。さらに、指摘されているように、互いに「層が離れている」ものは、​​おそらく互いに依存すべきではありません。これらの点を念頭に置いて設計を改善すると、この場合に役立ちます。

すでに使用しているフレームワークを最大限に活用するために、すべてのレイヤーをスプリングコンポーネントにすることを躊躇しません。DIフレームワークを使用する場合は、通常、DIフレームワークを使用してアプリケーション全体を構築すると便利です。そして、全体を通して@Inject(Java EE標準)を使用し、スコープ制御でDIフレームワークの配線を使用するクリーンな設計は、すべてを「新しく」するよりも実際にはクリーンであると主張します。

于 2012-09-21T15:36:21.200 に答える