2017-05-30 5 views
0

私のアプリケーションにテストデータベースを使用しようとしています。私はMyBatisを使用しています。 MyBatis構成ファイルに2つの環境が設定されています。私はResourceConfigサブクラスでプロパティを設定しています。休閑のように私のリソースで私は、このiの値を取得することができていますDependency InjenctがジャージーのResourceクラスでのみ動作する理由

property("Env","development"); 

、電子開発

@Context Application app;// this is instance variable 

System.out.println(app.getProperties().get("Env"));// this statement in resource method 

私は3層コントローラ(I、Eリソースクラス)、アクションレイヤーやDAOを持っており、 DMOマッパ層。

しかし、リソースクラスで動作している上記の2つのステートメントは、DAOクラスでは機能しません。私は今、私はリソース環境を取得し、さらなる層にそれを渡す必要がありSystem.out.printlnライン

でNullPointerExceptionが取得しています。これを行うより良い方法はありますか?

あなただけのDAOをインスタンス化しようとしているので、私が望むすべては開発

答えて

2

ほとんどのためのテストと開発データベースのテスト・データベースを選択することで仕事に行くのではないです

@Path("boogers") 
class Resource { 
    Dao dao = new Dao() 
} 

をyouself。 Daoはジャージーの注入システムを通過する必要があります。注入システムを通過するため、リソースは機能します。あなたはDaoのために同じことをやりたい場合は、それを注入し、それがDIシステムを通過させる必要があります。システムがリソースここ

@Path("boogers") 
class Resource { 
    @Inject 
    Dao dao; 
} 

、あなたはそれをインスタンス化していないにそれを注入する前に必要な依存関係とそれを注入しますこうすることで、あなたはDIシステムがそれを作成し、それを注入してみましょう。それを機能させるには、Daoを注射可能にする必要があります。ここで

class AppConfig extends ResourceConfig { 
    public AppConfig() { 
     register(new AbstractBinder() { 
      @Override 
      protected void configure() { 
       bindAsContract(Dao.class); 
      } 
     }); 
    } 
} 

それはを見たときに、つかむ/それを作成し、それを注入することができるようになりますように、あなたは、噴射システムにDaoクラスを結合しています。

+0

あなたの研究と知識を共有してくれてありがとう。これは私にDIの理解を助けました。ジャージーのHK2フレームワークを使用して、DIの記事にも感謝非常に有益と便利です –

関連する問題