Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在静态方法中使用@Autowired服务_Java_Spring_Static_Autowired - Fatal编程技术网

Java 在静态方法中使用@Autowired服务

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

我试图在一个具有静态方法的类中自动连接多个服务(大约10-15个),遇到了一个关于使用
@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个依赖项,这清楚地表明代码结构不好。这违反了单一责任原则,使您或您的同事更难维护代码。