spring不支持静态变量的注入解决方案

I18N工具类

public class I18N {

private static ApplicationContext ctx = BeanContext.ctx;

private static ReloadableResourceBundleMessageSource messageSource;

public static String getMessage(String key, Object... msgParam) {
        if(ctx == null){
            return key;
        }
        if(messageSource != null){
            messageSource.getMessage(key, msgParam, key, Locale.CHINA);
        }
        Map<String, ReloadableResourceBundleMessageSource> map = ctx.getBeansOfType(ReloadableResourceBundleMessageSource.class);
        if(map.size() ==  0){
            return key;
        }
        String beanKey = map.keySet().toArray(new String[]{})[0];
        messageSource = map.get(beanKey);
        return messageSource.getMessage(key, msgParam, key, Locale.CHINA);
    }
}

BeanContext类

public class BeanContext implements ApplicationContextAware {    
    
    public static ApplicationContext ctx;

@Override
    public void setApplicationContext(ApplicationContext context) throws BeansException {
        BeanContext.ctx = context;
    }
    
    public static Object getBean(String beanName) {
        return ctx.getBean(beanName);
    }
    
    public static <T> T getBean(Class<T> clazz) {
        return ctx.getBean(clazz);
    }
    
    public static <T> Map<String, T> getBeansOfType(Class<T> type) {
        Map<String, T> map = ctx.getBeansOfType(type);
        if (map == null) {
            map = new HashMap<String, T>();
        }
        return map;
    }

}

时间: 2024-10-04 17:42:07

spring不支持静态变量的注入解决方案的相关文章

Spring注入值到静态变量

Spring不允许将值注入静态变量,例如: import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class GlobalValue { @Value("${mongodb.db}") public static String DATABASE; } 如果打印GlobalValue.DATA

spring 对静态变量进行注解

要对静态变量进行注入 @Resource private static ITecharchService techarchService;//注入为空,spring注解注入不支持静态变量注入 查资料找到可以这样注入 @Component //必须是组件,才可以用@PostConstruct public class DDUtils{ @Resource private ITecharchService techarchService; private static DDUtils dd; @Po

python如何实现静态变量

python中是不支持静态变量的,所以可以通过以下的方法来实现静态变量的功能: 代码: class CTest(object): '''python静态变量实现方法''' __init=None def __new__(cls,value): if cls.__init is None: cls.__init=object.__new__(cls) cls.__init.value=value return cls.__init if __name__ == '__main__': flag1

Spring它不支持依赖注入static静态变量

在springframework在,我们不能@Autowired静态变量,制作spring bean,例如,没有那么: @Autowired private static YourClass yourClass; 可以试一下,yourClass在这样的状态下不可以被依赖注入,会抛出执行时异常java.lang.NullPointerException,为什么呢?静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入. 而使用静态变量/类变量扩大了静态方法的使用

Spring不支持依赖注入static静态变量

在springframework里,我们不能@Autowired一个静态变量,使之成为一个spring bean,例如下面这样: Java代码 @Autowired private static YourClass yourClass; 可以试一下,yourClass在这种状态下不能够被依赖注入,会抛出运行时异常java.lang.NullPointerException,为什么呢?静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入. 而使用静态变量/类变

Spring注解无法注入静态变量

参考:https://blog.csdn.net/BuquTianya/article/details/49009831 1.使用xml方式声明Bean,在xml中注入静态变量: 2.使用一个非静态的变量注入,然后在@PostConstruct标记的方法中给静态变量赋值. 3,在静态方法中获取bean AppConfMapper appConfMapper = (AppConfMapper) BeanHoldFactory.getApplicationContext().getBean("app

spring 给静态变量注入值

一般在spring中,给static变量加上@Autowired注解的时候会报空指针异常错误. 解决: 1.通过xml配置文件配置 这个就不多说了. 2.通过注解 @Component public class StructUtil { private static AttendanceMapper attendanceMapper; @Autowired public void setAttendanceMapper(AttendanceMapper attendanceMapper) { S

SpringBoot使用@Value从yml文件取值为空--注入静态变量

SpringBoot使用@Value从yml文件取值为空--注入静态变量 1.application.yml中配置内容如下: pcacmgr:   publicCertFilePath: E:\\pcacmgr\\CerFiles\\xh_public.cer   encPublicCertFilePath: E:\\pcacmgr\\CerFiles\\hjzf_encPublic.cer   encPfxFilePath: E:\\pcacmgr\\CerFiles\\hjzf_encPfx

SpringMvc通过@Value( ) 给静态变量注入值

spring 不允许/不支持把值注入到静态变量中,如: @Value("${ES.CLUSTER_NAME}")private static String CLUSTER_NAME; 在方法中获得的CLUSTER_NAME,会得到null 解决好在spring支持set方法注入,我们可以利用非静态setter 方法注入静态变量.如: private static String CLUSTER_NAME; @Value("${ES.CLUSTER_NAME}") pu