Spring

2015-08-01 19 views
11

statik yöntemiyle Java tabanlı yapılandırma herhangi birini neden statik yöntemini kullanarak PropertySourcesPlaceholderConfigurer bean bildirmeniz gerektiğini bildirebilir misiniz?Spring

@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"; 
} 

cevap

16

PropertySourcesPlaceholderConfigurer nesneler geçerli İlkbahar Çevre ve onun takımına karşı @Value ek açıklamaları çözmekle sorumludur - Ben sadece statik olmayan aşağıda için kullanırsanız ardından URL boş değere ayarlanır yerine mülkiyet dosyasından alacak bulundu PropertySources. PropertySourcesPlaceholderConfigurer sınıfı, BeanFactoryPostProcessor uygular. Kapsayıcı yaşam döngüsünde, bir BeanFactoryPostProcessor nesnesi, @Configuration ekli sınıfın bir nesnesinden daha önce başlatılmalıdır. Eğer örnek yöntemi bir PropertySourcesPlaceholderConfigurer nesne dönen @Configuration -annotated sınıf varsa

, daha sonra kap @Configuration -annotated sınıf nesnesi kendisi başlatmasını olmadan PropertySourcesPlaceholderConfigurer nesne örneğini olamaz. Bu örnekte,nesnesinin PropertySourcesPlaceholderConfigurer nesnesinin nesnenin oluşturulduğu anda mevcut olmadığı için @Value çözümlenemez. Böylece, @Value eklenmiş alan, null olan varsayılan değeri alır.

Daha fazla bilgi için lütfen @Beanjavadoc "Bootstrapping" bölümüne bakın.

+0

Yanıtladığınız için teşekkürler .... –