首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将托管bean(非静态)注入静态方法?

如何将托管bean(非静态)注入静态方法?
EN

Stack Overflow用户
提问于 2018-10-31 13:36:39
回答 1查看 4.6K关注 0票数 0

我在bean生命周期中使用Java。

代码语言:javascript
运行
复制
@Named
public class ManagedBeanClass{
    ...
    public ManagedProfile getManagedProfile(){
       return new ManagedProfile();//logic will goes here
    }
}

例如

代码语言:javascript
运行
复制
public class sample1{
      @Inject private ManagedBeanClass managedBeanClass;
      ...
      public static boolean methodExample() throws Exception{
           ManagedProfile managedProfile = managedBeanClass.getManagedProfile();
           ....
      }

}

尝试将(@Inject)托管bean注入静态方法,会显示比较错误。

无法对非静态字段managedBeanClass进行静态引用。

陷入上下文DI和静态对象生命周期。先帮我解决这件事谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-31 13:42:43

示例代码中的问题与CDI无关;您正在尝试从静态方法访问非静态字段(managedBeanClass)。这在Java中是不可能的(既没有CDI,也没有CDI)。

此外,静态方法几乎总是指向设计问题(*)。拥有这样的静态方法会使您的程序更难测试,更难更改/维护。想出一个根本不需要静态方法的设计.

所以,简单的回答是:不要。

但是,如果您真正的必须在这里有一个静态方法,您可以使用构造函数注入并从构造函数中设置一个静态字段。但是要小心:这是潜在的危险,因为每个新实例都会再次设置字段(这可能会导致竞争条件和意外行为)。

(另见:https://stackoverflow.com/a/22068572/10363398)

(*)除了一些例外,比如Math类中的方法。但这些都是非常小的,纯粹的功能,没有副作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53084716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档