当有个需求,类中的成员变量都是静态的,而且properties配置文件是使用spring加载的(如下)
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreUnresolvablePlaceholders" value="true" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>classpath:*.properties</value>
</list>
</property>
<property name="fileEncoding" value="UTF-8"/>
</bean>
读取配置文件的类如下:
@Service
public class ConfigConstance {
public static String KAFKA_ZK;
}
其中properties如下:
kafka.zk=hadoop01:2181,hadoop03:2181
当需要注入变量到KAFKA_ZK的时候如果直接在静态变量上面使用注解会得不到值:
@Service
public class ConfigConstance {
//这样得不到值
@Value("${kafka.zk}")
public static String KAFKA_ZK;
}
但是spring还有一种就是用set方法注入,当使用set方法注入就可以得到值了:
@Service
public class ConfigConstance {
public static String KAFKA_ZK;
//这样就可以注入值
@Value("${kafka.zk}")
public void setKafkaZk(String kafkaZk) {
KAFKA_ZK = kafkaZk;
}
}
总结:
spring初始化的时候想给静态变量注入值,需要用set的方式