spring – 从类的静态字段中的属性文件中读取属性值

我有一个实用工具类,我有一个方法,需要用户名和密码来连接其他url。 我需要在属性文件中保留该用户名,以便我可以随时更改它。 但是当我在静态方法(实用程序类)中使用它时,问题是它显示为null。(即它无法从属性文件中读取)。

但是当我在其他控制器中使用这些值时,他们就会到达那里。 所以我的问题是如何在静态字段中读取属性值

   classpath*:/myservice_detaults.properties classpath*:/log4j.properties    

//在Utitlity类代码中

  @Value("${app.username}") static String userName; public static connectToUrl(){ //use userName //userName showing null } 

Utility类中,您可以使用setter方法设置属性,然后可以使用MethdInvokingFactoryBean

 class Utility{ static String username; static String password; public static setUserNameAndPassword(String username, String password){ Utility.username = username; Utility.password = password; } //other stuff }    classpath*:/myservice_detaults.properties classpath*:/log4j.properties        ${username} ${password}    
 Read property value from properties file in static field of class using Java based spring configuration. Example : // The property file to store fields. user.properties username=Elijah Wood age=26 language=English // This class holds the static values 

package org.javahive.propertyreader.example;

 public class UserDetails { static String username; static String age; static String language; public static void setUserValues(String username, String age, String language) { UserDetails.username = username; UserDetails.age = age; UserDetails.language = language; } } //Spring configuration class package org.javahive.propertyreader.example; import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.config.MethodInvokingFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; @Configuration @ComponentScan(value = { "org.javahive.propertyreader.example" }) @PropertySource("classpath:user.properties") public class PropertyReaderConfig { @Value("${user}") private String username; @Value("${age}") private String age; @Value("${language}") private String language; @Bean public static PropertySourcesPlaceholderConfigurer propertyConfigIn() { return new PropertySourcesPlaceholderConfigurer(); } @Bean public MethodInvokingFactoryBean methodInvokingFactoryBean() { MethodInvokingFactoryBean mifb = new MethodInvokingFactoryBean(); mifb.setStaticMethod("org.javahive.propertyreader.example.UserDetails.setUserValues"); mifb.setArguments(new String[] { this.username, this.age, this.language }); return mifb; } /** * @return the name */ public String getName() { return username; } /** * @param name * the name to set */ public void setName(String name) { this.username = name; } /** * @return the age */ public String getAge() { return age; } /** * @param age * the age to set */ public void setAge(String age) { this.age = age; } /** * @return the language */ public String getLanguage() { return language; } /** * @param language * the language to set */ public void setLanguage(String language) { this.language = language; } } //The main class. 

package org.javahive.propertyreader.example;

 import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(PropertyReaderConfig.class); System.out.println("User Name : " + UserDetails.username); System.out.println("Age : " + UserDetails.age); System.out.println("Language : " + UserDetails.language); } } 

或者在username的非静态setter方法上使用@Value ,例如。

 @Value("${app.username}") public void setUserName(String userName) { UtilityClass.userName = userName; } 

Spring不允许将值注入到非最终的静态字段中,但是将字段设为私有,它应该可以工作。

要不就