Java 在静态方法中使用@Autowired服务
我试图在一个具有静态方法的类中自动连接多个服务(大约10-15个),遇到了一个关于使用Java 在静态方法中使用@Autowired服务,java,spring,static,autowired,Java,Spring,Static,Autowired,我试图在一个具有静态方法的类中自动连接多个服务(大约10-15个),遇到了一个关于使用@Autowired构造函数的解决方案。我们也可以对多个类使用constructor@Autowired方法吗 例如,假设我有两个类Foo1和Foo2。我可以为这两个类使用单个构造函数吗 @Component public class Boo { private static Foo1 foo1; private static Foo2 foo2; @Autowired pu
@Autowired
构造函数的解决方案。我们也可以对多个类使用constructor@Autowired方法吗
例如,假设我有两个类Foo1
和Foo2
。我可以为这两个类使用单个构造函数吗
@Component
public class Boo {
private static Foo1 foo1;
private static Foo2 foo2;
@Autowired
public Boo(Foo1 foo1, Foo2 foo2) {
Boo.foo1 = foo1;
Boo.foo2 = foo2;
}
public static void randomMethod() {
foo1.doStuff();
foo2.doSomeOtherStuff();
}
}
或者有其他方法来实现这一点吗?Spring+
静态
是一个非常糟糕的主意
我建议将randomMethod()
设置为非static
,然后在之前必须调用static
方法的任何地方注入Boo
。例如,改变这一点:
class A {
public void run() {
Boo.randomMethod();
}
}
为此:
@Component
public class A {
private final Boo boo;
@Autowired
public A(Boo boo) {
this.boo = boo;
}
public void run() {
boo.randomMethod();
}
}
这个构造是spring想要的方式,我建议您使用它。是的,您可以,但对于一个或两个或任意数量的类来说,这通常是一个非常糟糕的主意。改变静态字段是个坏主意,不能保证在调用
randomMethod
之前调用构造函数,这可能会导致NPE。@Bhagyesh您知道什么是“静态”还是“静态”吗?这里最明显的答案是noAlso,在一个类中有10到15个依赖项,这清楚地表明代码结构不好。这违反了单一责任原则,使您或您的同事更难维护代码。