2016-04-30 11 views
0

私が知る限り、CDIは依存しないBeanの注入にダイナミックプロキシを使用しています。問題はない、いくつかのインターフェイスを実装するクラスがある場合、例:CDIがインタフェースを持たないクラスのプロキシを注入する方法

@SessionScoped 
public class MessageBean implements Message {...} 

プロキシは、Messageインタフェースに基づいて作成することができますが、どのような場合はクラスが何のインターフェイスを実装していない:

@SessionScoped 
public class MessageBean {...} 

注入サーブレットにはまだ動作しています:

@WebServlet("/example") 
public class MessageServlet extends HttpServlet { 

    @Inject 
    private MessageBean messageBean; 

ですので、どうやってどうやって扱うのですか?

+0

これはクラスを拡張するだけです。 – BalusC

+0

[docs](https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Proxy.html)によると、次の2つの文があります。_Aプロキシ・クラスはjava.lang.reflectを拡張します.Proxy_と_Aプロキシクラスは、そのcreation_で指定されたインタフェースを正確に実装しているため、インタフェースなしでプロキシを作成することは可能ですか? [this](http://stackoverflow.com/questions/3291637/alternatives-to-java-lang-reflect-proxy-for-creating-proxies-of-abstract-classes)のトピックによると、CGLIBでは例。 – swch

+0

hk2はまた、この時点で積極的に維持されていないように見えるので、javassistを使用します – jwells131313

答えて

2

すべてのプロキシがjava.lang.reflect.Proxyのインスタンスであるわけではありませんが、Weldはこの時点で独自のプロキシフレームワークを持ち、最終的ではないクラスをサブクラス化できます。 Weldはまた、javassistを使用してプロキシを実行しません(古いバージョンは行いましたが、2.xは内部的です)。

あなたはあなたがそのここで見つけることができますが起こるか見て興味がいる場合:https://github.com/weld/core/blob/master/impl/src/main/java/org/jboss/weld/bean/proxy/ProxyFactory.java

一つのノートは - 全体のプロセスは非finalメソッドやクラスを依存しています。あなたはCDI仕様でさえ非最終的なものを参照することに気付くでしょう。

関連する問題