为什么 Dependency Injenct 只适用于 Resource class in jersey
Why Dependency Injenct only works in Resource class in jersey
我正在尝试为我的应用程序使用测试数据库。我正在使用 MyBatis。
我在 MyBatis 配置文件中配置了 2 个环境。我在我的 ResourceConfig subclass.
中设置了 属性
property("Env","development");
我能够在我的资源中获得这个价值,例如 development
@Context Application app;// this is instance variable
System.out.println(app.getProperties().get("Env"));// this statement in resource method
我有 3 层控制器(即资源 class)、操作层以及 DAO 和 DMO 映射器层。
但是在资源 class 中工作的上述 2 个语句在 DAO class 中不工作。我在 System.out.println
行
收到 NullPointerException
现在我必须在 Resource 中获取环境并将其传递到更多层。有一个更好的方法吗。
我只想选择测试库进行测试,开发库进行开发
很可能是因为您只是想自己实例化 DAO
@Path("boogers")
class Resource {
Dao dao = new Dao()
}
那是行不通的。 Dao
需要通过 Jersey 的注入系统。该资源之所以有效,是因为它通过了注入系统。如果你想为你的 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
class 绑定到注入系统,这样每当它看到 @Inject Dao
时,它就能够 grab/create 它并注入它。
我正在尝试为我的应用程序使用测试数据库。我正在使用 MyBatis。 我在 MyBatis 配置文件中配置了 2 个环境。我在我的 ResourceConfig subclass.
中设置了 属性property("Env","development");
我能够在我的资源中获得这个价值,例如 development
@Context Application app;// this is instance variable
System.out.println(app.getProperties().get("Env"));// this statement in resource method
我有 3 层控制器(即资源 class)、操作层以及 DAO 和 DMO 映射器层。
但是在资源 class 中工作的上述 2 个语句在 DAO class 中不工作。我在 System.out.println
行
现在我必须在 Resource 中获取环境并将其传递到更多层。有一个更好的方法吗。
我只想选择测试库进行测试,开发库进行开发
很可能是因为您只是想自己实例化 DAO
@Path("boogers")
class Resource {
Dao dao = new Dao()
}
那是行不通的。 Dao
需要通过 Jersey 的注入系统。该资源之所以有效,是因为它通过了注入系统。如果你想为你的 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
class 绑定到注入系统,这样每当它看到 @Inject Dao
时,它就能够 grab/create 它并注入它。