2017-05-30 70 views
0

我正在尝试为我的应用程序使用测试数据库。我正在使用MyBatis。 我在MyBatis配置文件中配置了2个环境。我在我的ResourceConfig子类中设置了属性。为什么依赖项Injenct只能在球衣的资源类中运行

property("Env","development"); 

我能够得到这个值I,E 发展在我的资源像休耕

@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类中不起作用。我得到一个NullPointerException在System.out.println

现在我必须在Resource中获取环境并将它传递给更多图层。有一个更好的方法吗。

所有我想要的是选择测试数据库用于测试和开发数据库开发

回答

2

最有可能的,因为你只是想实例化DAO youself

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

这是行不通的。 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文章也非常丰富和有益的感谢 –

相关问题