从头开始没有任何以前的Jersey 1.x知识,我很难理解如何在我的Jersey 2.0项目中设置依赖注入.
我也明白HK2可用于Jersey 2.0,但我似乎无法找到有助于Jersey 2.0集成的文档.
@ManagedBean
@Path("myresource")
public class MyResource {
@Inject
MyService myService;
/**
* Method handling HTTP GET requests. The returned object will be sent
* to the client as "text/plain" media type.
*
* @return String that will be returned as a text/plain response.
*/
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/getit")
public String getIt() {
return "Got it {" + myService + "}";
}
}
@Resource
@ManagedBean
public class MyService {
void serviceCall() {
System.out.print("Service calls");
}
}
Run Code Online (Sandbox Code Playgroud)
的pom.xml …
跟进Jersey + HK2 + Grizzly:注入EntityManager的正确方法?,我想了解如何在不是球衣资源的类中使用依赖注入.
例如,我可能在ExecutorService中运行后台任务,他们可能需要一个EntityManager.如果我尝试@Inject将EntityManager引入该类,则不会发生任何事情.将它注入一个@Path注释的泽西资源类,注入工作正常.
应用程序作为独立的JVM运行,而不是在Java EE应用程序服务器上运行.
更新:我创建了一个测试场景来证明我的意思.代码运行的是一个带有Jersey资源的独立Grizzly服务器,以及一个ExecutorService.A Callable被提交给ExecutorService.
将EntityManager注入资源可以工作,但不能注入Callable.那里的EntityManager仍然存在null.
请告知这里的代码是否比github更好.
我正在开发小应用程序并且在DI方面存在一些问题.
我有一个存储库类用于保存我注入到我的服务中的实体.我想使用H2K向它注入Session对象.为此我尝试做以下SO帖子中描述的类似内容:
所以我创建了SFFactory类并在ApplicationConfig中注册它.
SFFactory.java
import org.glassfish.hk2.api.Factory;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class SFFactory implements Factory<Session> {
private SessionFactory factory;
public SFFactory() {
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
StandardServiceRegistryBuilder srBuilder = new StandardServiceRegistryBuilder();
srBuilder.applySettings(configuration.getProperties());
factory = configuration.buildSessionFactory(srBuilder.build());
}
@Override
public Session provide() {
return factory.openSession();
}
@Override
public void dispose(Session session) {
if (session.isOpen()) {
session.close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
ApplicationConfig.java
import org.alexdzot.phonettesttask.repository.MessageRepository;
import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.glassfish.jersey.server.ResourceConfig;
import org.hibernate.Session; …Run Code Online (Sandbox Code Playgroud)