Java静态代码获取不到@value注入的值

静态代码执行的时候,spring是没有注入的,这个时候:

//错误的使用方法
@Value("${name}")
private static String name;

public static void test() {
    String s = name;
    System.out.println(s);
}

  

解决办法:

@Component
public class Properties {

    @Value("${name}")
    private String name;
    
public getName(){
    return name;
  }
}

  

@Component
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext = null;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(SpringContextUtil.applicationContext == null){
            SpringContextUtil.applicationContext  = applicationContext;
        }
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }

    public static <T> T getBean(Class<T> clazz){
        return getApplicationContext().getBean(clazz);
    }

    public static <T> T getBean(String name,Class<T> clazz){
        return getApplicationContext().getBean(name, clazz);
    }

  

public static void test() {
    Properties properties = SpringContextUtil.getBean(Properties.class);
    String s = properties.getName();
    System.out.println(s);//成功打印name值
}

 

使用springboot的同学,需要动态获取生产、测试、开发环境的,可以在pom文件里定义

<profile>
            <id>test</id>
            <properties>
                <profileActive>test</profileActive>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault><!--默认配置-->
            </activation>
        </profile>
<profile>
<id>prod</id>
<properties>
<profileActive>prod</profileActive>
</properties>
</profile>

  

在application.yml里配置,系统根据pom定义的profileActive(test)会找相应的application-test.yml文件

spring:
  profiles:
    active: @profileActive@

  

猜你喜欢

转载自www.cnblogs.com/wochenjun/p/10698313.html