如何在RESTWeb服务java上注入应用程序范围bean
我必须在ContextCacheRefresh web服务上注入initApplicationContext bean,但不成功,initApplicationContext值始终为null。有人知道该怎么处理吗如何在RESTWeb服务java上注入应用程序范围bean,java,rest,jakarta-ee,jax-rs,Java,Rest,Jakarta Ee,Jax Rs,我必须在ContextCacheRefresh web服务上注入initApplicationContext bean,但不成功,initApplicationContext值始终为null。有人知道该怎么处理吗 @ManagedBean(name = "initApplicationContext", eager = true) @ApplicationScoped public class InitApplicationContext { ..........
@ManagedBean(name = "initApplicationContext", eager = true)
@ApplicationScoped
public class InitApplicationContext {
.......................
}
和web服务
@Path("/serviceContext")
public class ContextCacheRefresh {
@ManagedProperty(value = "#{initApplicationContext}")
private InitApplicationContext initApplicationContext;
@GET
@Path("/refreshContext")
public Response refreshUserListOn(@QueryParam("param") String param
) { ......
您将无法使用
@ManagedProperty
让JSF将资源注入非JSF上下文。你的选择是
@Named
来声明托管bean和@Inject
,而不是您现在使用的JSF注释//inject the servlet context
@javax.ws.rs.core.Context
ServletContext servletContext
public InitApplicationContext getInitContext(){
return (InitApplicationContext)servletContext.getAttribute("initApplicationContext");
}
在我看来,您的工作方向似乎有点棘手。为什么您的web应用程序一开始就关注RESTful端点?这是JSF应用程序吗?如果不是,您应该使用
@Inject
是的,它是JSF应用程序不是真的:您试图将JSF资源注入到非JSF上下文中;不起作用。使用@Named
注释,而不是@ManagedBean
,以及@Inject
将其注入restful服务。托管bean只是jsf页面的控制器。非常感谢,它可以工作!我正在开发分离的多模块web应用程序,所有模块都使用相同的db实例。为此,我必须将一个模块的更改反映到其他模块我选择使用web服务。