Spring Bean初始化之后是否发生静态初始化

时间:2019-05-06 06:12:19

标签: spring spring-boot

我创建了一个服务来按类名获取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,并将其设置为静态变量。

上面的代码对我来说很好。 但是我想知道总会好吗?

1 个答案:

答案 0 :(得分:0)

当您启动JVM并首次加载类时(这是由以任何方式首次引用该类的类加载器完成的),所有静态块或字段都被“加载”到JVM中并可以访问。 因此,在您的情况下,Mapper类未作为spring初始化类的一部分进行引用,因此尚未加载定义的静态变量。 您可以找到此参考链接,可能会有所帮助。 How static Variables loaded at run time