2015-08-01 9 views
11

Qualcuno può consigliare perché è necessario dichiarare il bean PropertySourcesPlaceholderConfigurer utilizzando un metodo statico statico? Ho appena scoperto che se uso non statico per di sotto quindi url verrà impostata al valore nullo invece di prendere da file di proprietà -Spring Java based configuration with static method

@Value("${spring.datasource.url}") 
private String url; 

@Bean 
public static PropertySourcesPlaceholderConfigurer propertyConfig(String profile) { 
    String propertyFileName = "application_"+profile+".properties"; 
    System.out.println(propertyFileName); 
    PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); 
    configurer.setLocation(new ClassPathResource(propertyFileName)); 
    return configurer; 
} 

@Bean 
@Profile("local") 
public static String localProfile(){ 
    return "local"; 
} 

@Bean 
@Profile("prod") 
public static String prodProfile(){ 
    return "prod"; 
} 

risposta

16

PropertySourcesPlaceholderConfigurer oggetti sono responsabili per la risoluzione @Value annotazioni contro corrente primavera Ambiente e il suo set di PropertySources. PropertySourcesPlaceholderConfigurer strumenti di classe BeanFactoryPostProcessor. Nel ciclo di vita del contenitore, un oggetto BeanFactoryPostProcessor deve essere istanziato prima di un oggetto di classe @Configuration -annotato.

Se hai @Configuration classe -annotated con metodo di istanza che restituisce un oggetto PropertySourcesPlaceholderConfigurer, quindi il contenitore non può un'istanza dell'oggetto PropertySourcesPlaceholderConfigurer senza istanziare l'oggetto @Configuration classe -annotated stessa. In questo caso, non può essere risolto, poiché l'oggetto PropertySourcesPlaceholderConfigurer non esiste al momento dell'istanziazione dell'oggetto della classe @Configuration -annotated. Pertanto, nel campo @Value -annotated viene preso il valore predefinito, ovvero null.

Vedere la parte "Bootstrapping" di @Beanjavadoc per ulteriori informazioni.

+0

grazie per aver risposto .... –