java - 如何在 rest web 服务 java 上注入(inject)应用程序范围 bean

标签 java rest jakarta-ee jax-rs

我必须在 ContextCacheRefresh Web 服务上注入(inject) initApplicationContext bean,但没有成功,initApplicationContext 值始终为空。有人知道如何处理它吗?

@ManagedBean(name = "initApplicationContext", eager = true)
@ApplicationScoped
   public class InitApplicationContext {
             .......................
               }

和网络服务

  @Path("/serviceContext")
  public class ContextCacheRefresh  {

   @ManagedProperty(value = "#{initApplicationContext}")
    private  InitApplicationContext initApplicationContext;

  @GET
  @Path("/refreshContext")

 public Response refreshUserListOn(@QueryParam("param") String param
  ) { ......

最佳答案

您将无法使用 @ManagedProperty 让 JSF 将资源注入(inject)非 JSF 上下文。您的选择是

  1. 将您的托管 bean 转换为使用 CDI 注释(@Named 来声明托管 bean 和 @Inject 而不是您现在使用的 JSF 注释.

  2. 只需使用以下命令从普通 servlet 上下文中拉取 bean:

    //inject the servlet context
    @javax.ws.rs.core.Context 
    ServletContext servletContext
    
    public InitApplicationContext getInitContext(){
        return (InitApplicationContext)servletContext.getAttribute("initApplicationContext");
    }
    

在我看来,您的工作方向有点不靠谱。为什么您的 Web 应用程序一开始就关注您的 RESTful 端点?

关于java - 如何在 rest web 服务 java 上注入(inject)应用程序范围 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28308529/

相关文章:

java - 将范围与 HttpSessionListener 连接

java - 如何使用 RESTful Web 服务?

java - HttpServlet 类与 Jersey 的混淆

java - Java中如何在集群之间安全地共享信息?

java - 保证并发 Web 服务调用之间数据一致性的最佳执行方法?

java - final 字段和匿名类

java - 关于使用 Maven 将本地文件夹 jar 复制到 Lib 文件夹中的查询

java - GroupLayout layout=new GroupLayout(getContentPane())

java - 改造响应主体接收到具有空字段的一半对象

java - InitialContext 的 OSGi 和 ClassNotFoundException