【问题标题】:Is DI to static field not good?DI到静态场不好吗?
【发布时间】:2020-07-17 10:52:04
【问题描述】:

我对其中包含静态字段的组件 bean 有疑问。

我对静态字段进行了 DI 以实现静态方法,以便其他类可以在没有 DI 的情况下调用该方法

这是不自然的东西吗?只是有人对此有疑问,所以..

-编辑

我附上了一些显示我想要的代码

@Component
public class CompWithStatic {

    private static InjectedObj injectedObj ;

    @Autowired
    CompWithStatic(InjectedObj injectedObj ) {
        CompWithStatic.injectedObj = injectedObj;
    }

    public static String doStaticA(String str){
        //do something with injectedObj
        return str + " method A ";
    }

    public static String doStaticB(String str){
        //do something with injectedObj
        return str + " method B ";
    }
}


public enum EnumType {
    ENUMA(str-> CompWithStatic.doStaticA(str)),
    ENUMB(str-> CompWithStatic.doStaticB(str));

    private Function<String,String> expression;

    EnumType(Function expression) {
        this.expression = expression;
    }

    public String doExpress(String str){
        return expression.apply(str);
    }
}

我的意图是每个 Enum 案例都有动态方法 所以你可以像这样使用它

        EnumType.ENUMA.doExpress("str");

如果不自然,请告诉我!

【问题讨论】:

  • 文字超级不清楚..
  • 对不起,我只是用我的手机添加了这个问题。当我可以使用计算机时,我会用代码编辑这个问题

标签: spring dependency-injection static code-injection


【解决方案1】:

静态字段在某种程度上是可以的,通常 bean 中的常量被定义为静态最终常量。

但是完全不推荐使用 bean 中的静态方法,因为在对象中没有静态方法的参与,在 DI 中没有任何位置。 (尽管在 bean 中拥有静态方法应该不是问题,因为这些引用将在编译时被 Class 替换)。

【讨论】:

    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 2011-09-27
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2011-02-14
    相关资源
    最近更新 更多