DI 到静态字段不好吗?
Is DI to static field not good?
我对其中包含静态字段的组件 bean 有疑问。
并且我对静态字段进行了 DI 以实现静态方法,以便其他 class 可以在没有 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);
}
}
我的意图是每个枚举案例都有动态方法
所以你可以像这样使用它
EnumType.ENUMA.doExpress("str");
如果这是不自然的方式,请告诉我!
静态字段在某种程度上是可以的,通常 bean 中的常量被定义为静态最终常量。
但是根本不推荐bean中的静态方法,因为对象中没有静态方法的参与,在DI中没有任何位置。 (虽然在 bean 中使用静态方法应该不是问题,因为这些引用将在编译期间被 Class 替换)。
我对其中包含静态字段的组件 bean 有疑问。
并且我对静态字段进行了 DI 以实现静态方法,以便其他 class 可以在没有 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);
}
}
我的意图是每个枚举案例都有动态方法 所以你可以像这样使用它
EnumType.ENUMA.doExpress("str");
如果这是不自然的方式,请告诉我!
静态字段在某种程度上是可以的,通常 bean 中的常量被定义为静态最终常量。
但是根本不推荐bean中的静态方法,因为对象中没有静态方法的参与,在DI中没有任何位置。 (虽然在 bean 中使用静态方法应该不是问题,因为这些引用将在编译期间被 Class 替换)。