1

Jee6が実行時の依存性注入をサポートしているかどうか知りたい...

私はおそらく複数の概念を含んでいるので、私が望むアーキテクチャを説明しようとしています

  1. インターフェイスを含む jar

public interface Hello { public String say(); }

インターフェイスを参照する戦争(したがって、インターフェイス Hello jar は WEB-INF/lib にパックされています)

@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Inject @Any 
    Instance<Hello> hello;
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          PrintWriter out = response.getWriter();
            out.println(hello.iterator().next().say());
    }

わかりましたので、どんな問題でもそれを達成できます

基本的に、そのインターフェースに複数のプロデューサーが必要です

@Named
public class HelloImpl implements Hello {

    @Override
    public String say() {
        // TODO Auto-generated method stub
        return "TEST";
    }

}

とても簡単ですが、これをモジュール化可能にする方法がわかりません (実行時に実装を追加または削除できます):

  1. 実装をwarファイルに入れると、別のコンテキストで実行されますか?

  2. jarファイルに入れた場合、それを正しく使用するには、最初の戦争WEB-INFに入れる必要がありますか? 実行中にjarを動的に追加または削除できますか、いいえ...またははい、クラスローダーとjarファイルのアンロードにあまり慣れていません

最良の質問、それがすべて実行できる場合、jar の aise イベントを web-inf/lib に追加および/または削除する方法がある場合は?

私はOSGIに行く準備ができていないとしましょうが、私の問題はその技術のいくつかの機能によってカバーされるかもしれません.私はできればjee6にとどまりたい.

ありがとう

4

3 に答える 3

1

@Specializes または @Alternative を見るか、単にプロデューサーとクラスで異なる修飾子を使用することができます。次に、インスタンスを使用してそれらを反復処理することにより、使用するものを選択する必要があります。

于 2012-10-15T01:01:24.497 に答える
0

InjectionPointなどの でプロデューサーを調べ@Produces Hello obtainHelloImpl(InjectionPoint ip)ます。

この記事は、 http://java.dzone.com/articles/cdi-di-p2で大いに役立つでしょう。

于 2012-11-01T04:19:41.243 に答える
0

Glassfish をアプリケーション コンテナとして使用している場合は、https://blogs.oracle.com/arungupta/entry/totd_154_dynamic_osgi_services を参照してください。

数年前に使用しましたが、これが機能するかどうかは100%わかりません

    @Inject
    @Any
    Instance<MyService> myServiceInstances;

または、もう少し OSGI マジックを実行する必要がある場合

于 2013-08-01T06:11:21.580 に答える