Java 依赖注入代替静态块

Java 依赖注入代替静态块,java,spring,spring-boot,Java,Spring,Spring Boot,我想知道如何使用DI来代替静态块 private static String p1; private static String p2; private static String p3; private static interface i1; static { Interface1 i2 = new Class1 ( new Class2 ( p1 , p2 ) ); Class2 c1 = new Class2 ( p3 , parameter);

我想知道如何使用DI来代替静态块

private static String p1;

private static String p2;

private static String p3;

private static interface i1;

static {

Interface1  i2 =    new Class1  ( new Class2 ( p1 ,  p2 ) );

Class2      c1 =    new Class2  ( p3 , parameter);

i1         = //some statement

}

为了在Spring中使用DI,您需要在要注入的类之上使用@Component或@Service,如下所示:

@Component
class Class1 implements Interface1 {
...
}

@Component
class Class2 {
 ...
}
@Component
class ClassOfInjection {
 @Autowired
private Class1 c1;

@Autowired
private Class2 c2;

}
现在在要注入bean的类中,执行以下操作:

@Component
class Class1 implements Interface1 {
...
}

@Component
class Class2 {
 ...
}
@Component
class ClassOfInjection {
 @Autowired
private Class1 c1;

@Autowired
private Class2 c2;

}

您可以找到更多详细信息。

我应该在静态块中写什么来代替“Interface1 i2=new Class1(new Class2(p1,p2));Class2 c1=new Class2(p3,parameter);”?我是否需要使用@PostConstruct?如果需要,我如何替换静态块中的代码?对于Class2,您也可以使用DI。您可以通过使用组件将Class2声明为Spring管理的bean,并通过使用Autowired将Class2注入Class1,而不是使用Class2作为参数构造函数。你可以在发布的链接中阅读更多内容。你能进一步解释吗?给定的代码有什么问题?第一个问题是有那些静态数据。除了实际常量(如命名字符串),字段几乎总是实例字段。