我创建了一个服务来按类名获取bean。
package com.ril.service.promise.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class BeanService {
private static ApplicationContext applicationContextStatic;
@Autowired
BeanService(ApplicationContext applicationContext) {
applicationContextStatic = applicationContext;
}
public static <T> T getBean(Class<T> className) {
return applicationContextStatic.getBean(className);
}
}
我正在初始化一个静态变量链接。
import java.time.LocalDateTime;
import java.util.*;
public class Mapper {
private static Logger LOGGER = LoggerFactory.getLogger(Mapper.class);
private static PEConfigService peConfigService = BeanService.getBean(PEConfigService.class);
}
在mapper中,如您所见,我正在Mapper中获取不是Spring bean类的Bean,并将其设置为静态变量。
上面的代码对我来说很好。 但是我想知道总会好吗?
答案 0 :(得分:0)
当您启动JVM并首次加载类时(这是由以任何方式首次引用该类的类加载器完成的),所有静态块或字段都被“加载”到JVM中并可以访问。 因此,在您的情况下,Mapper类未作为spring初始化类的一部分进行引用,因此尚未加载定义的静态变量。 您可以找到此参考链接,可能会有所帮助。 How static Variables loaded at run time