我在bean生命周期中使用Java。
@Named
public class ManagedBeanClass{
...
public ManagedProfile getManagedProfile(){
return new ManagedProfile();//logic will goes here
}
}
例如
public class sample1{
@Inject private ManagedBeanClass managedBeanClass;
...
public static boolean methodExample() throws Exception{
ManagedProfile managedProfile = managedBeanClass.getManagedProfile();
....
}
}
尝试将(@Inject)托管bean注入静态方法,会显示比较错误。
无法对非静态字段managedBeanClass进行静态引用。
陷入上下文DI和静态对象生命周期。先帮我解决这件事谢谢。
发布于 2018-10-31 13:42:43
示例代码中的问题与CDI无关;您正在尝试从静态方法访问非静态字段(managedBeanClass
)。这在Java中是不可能的(既没有CDI,也没有CDI)。
此外,静态方法几乎总是指向设计问题(*)。拥有这样的静态方法会使您的程序更难测试,更难更改/维护。想出一个根本不需要静态方法的设计.
所以,简单的回答是:不要。
但是,如果您真正的必须在这里有一个静态方法,您可以使用构造函数注入并从构造函数中设置一个静态字段。但是要小心:这是潜在的危险,因为每个新实例都会再次设置字段(这可能会导致竞争条件和意外行为)。
(另见:https://stackoverflow.com/a/22068572/10363398)
(*)除了一些例外,比如Math类中的方法。但这些都是非常小的,纯粹的功能,没有副作用。
https://stackoverflow.com/questions/53084716
复制相似问题