0

私のプロジェクト (JBoss MSC バージョン 1.0.2.GA-redhat-2) の基本的なアーキテクチャはこのようなものです

(VWebProj) --- >compile dependency ---> service project (QServiceProj) 

 (QServiceProj) ---->compile dependency ---> proxy project(VProxyProj)

 (VProxyProj) ---->compile dependency ---> Manager project(VQManagerProj)

マネージャ プロジェクト(VQManagerProj)

マネージャー プロジェクト (VQManagerProj) 内にマネージャー クラスがあり、クラス JDAO を拡張し、インターフェイス VDAO を実装します。

@Named("qManager")
@ApplicationScoped
public class QManager extends JDAO {...}

JDAO implements VDAO

プロキシ プロジェクト (VProxyProj)

Proxy Project (VProxyProj) 内にプロキシ クラスがあり、インターフェイス VProxy を実装し、マネージャーが注入されています。

@Named("vProxyImpl")
@ApplicationScoped
public class VProxyImpl implements VProxy {

    @Inject @Named("qManager")  
    private VDao vdao;

}

サービス プロジェクト (QServiceProj)

抽象クラスを拡張するサービス プロジェクト (QServiceProj) 内にサービス クラスがあります。

@Named
@ApplicationScoped
public class QService extends AbstractService {..}

抽象クラス内にプロキシを挿入しました

 public abstract class AbstractService{    
     @Inject @Named("vProxyImpl")
        private static VProxy proxy;
    }

このプロキシ オブジェクトを使用して、サービス クラスはマネージャなどを呼び出します。

Web プロジェクト (VWebProj)

これで、サービス クラスが挿入された Web プロジェクト (VWebProj) 内にサーブレットができました。

@Inject
private QService qService;

問題は、qService を除いて、他のインジェクションが機能しないことです。つまり、QService プロキシ インスタンス内が null です。

ただし、このようにすべてのインジェクションをサーブレット クラスに直接追加すると

@Inject @Named("qManager")  
        private VDao vdao;

@Inject @Named("vProxyImpl")
            private static VProxy proxy;

それらはすべて初期化されていますが、QService を経由すると null になります

すべてのプロジェクトに beans.xml を配置しました。

前もって感謝します チャーリー

4

1 に答える 1

1

私が知る限り、インジェクターはオブジェクトをインスタンスとそのフィールドにのみ注入できます-依存関係を静的フィールドに「注入」しようとしています。

代わりに @Singleton アノテーションを使用することをお勧めします。現在のすべての静的参照を保持する別のインスタンスを作成し、代わりにそのシングルトンをインスタンスに注入します。

@Singleton
class ProxyService {
     @Inject @Named("vProxyImpl")
     private VProxy proxy;

     public VProxy getProxy() {
         return proxy;
     }
}

public abstract class AbstractService{    
     @Inject
     private ProxyService proxyService;
}

または、VProxy シングルトンを作成することを検討することもできます。取得したいのは、アプリケーション全体で Proxy の 1 つのインスタンスにすぎないようです。ここでの最善のアプローチは何かを自分で決める必要があります。

于 2013-05-03T15:56:29.207 に答える