使用弹簧注入分配私有静态最终字段成员

时间:2014-08-12 15:12:19

标签: java spring

是否有可能实现这样的任务。此处的article处理private static字段成员,但在这种情况下无法帮助,因为无法分配最终成员。

使用private static final作为成员的限定符的理由:

  • 数据成员是ServiceClient,因此将其附加到类型是有意义的,因为它不依赖于实例。它的线程安全,所以它会提高性能,因为我不会为每个实例初始化客户端。
  • 服务客户端本身是一个bean,具有单例范围。因此实际上只有一个实例。由于总会有一个实例,因此无需重新分配。
  • 由于此客户端仅由此类的方法使用,因此它是私有的。

我不确定这是否是反模式,但如果是,那么我的理由是否有资格使用它?如果是,那怎么办呢。如果不是,那么请建议一个替代方案(我仍然有兴趣知道如何实现这一目标,仅用于知识目的)。

1 个答案:

答案 0 :(得分:1)

你想做什么,根本不可能。

最根本的原因是Java取代static final"变量"代码中出现的实际值(因为它当然在编译时已知)。查看this SO回答了解更多详情。

即使您没有使用final,Spring仍然不允许您直接向static变量注入值。您必须使用像:

这样的setter
@Value("${my.name}")
public void setPrivateName(String privateName) {
    Sample.name = privateName;
}  

请查看this以获取更多答案。