2013-06-13 31 views
52

Tôi đã phá vỡ đầu của tôi về điều này. Không chắc chắn những gì tôi đang thiếu. Tôi không thể để có được những @Value chú thích để làm việc trong một java ứng dụng xuân cấu hình thuần túy (không web)Mùa xuân 3.2 @value chú thích với cấu hình java tinh khiết không hoạt động, nhưng Environment.getProperty hoạt động

@Configuration 
@PropertySource("classpath:app.properties") 
public class Config { 
    @Value("${my.prop}") 
    String name; 

    @Autowired 
    Environment env; 

    @Bean(name = "myBean", initMethod = "print") 
    public MyBean getMyBean(){ 
     MyBean myBean = new MyBean(); 
     myBean.setName(name); 
     System.out.println(env.getProperty("my.prop")); 
     return myBean; 
    } 
} 

Các tập tin bất động sản chỉ chứa my.prop=avalue bean được như sau:

public class MyBean { 
    String name; 
    public void print() { 
     System.out.println("Name: " + name); 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

Biến môi trường in giá trị đúng cách, @Value thì không.
avalue
Name: ${my.prop}

Các lớp học chính chỉ khởi bối cảnh.

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class); 

Tuy nhiên nếu tôi sử dụng

@ImportResource("classpath:property-config.xml") 

với đoạn này

<context:property-placeholder location="app.properties" /> 

sau đó nó hoạt động tốt. Tất nhiên bây giờ lợi nhuận môi trường null.

Trả lời

95

Thêm khai báo đậu sau trong Config lớp học của bạn

@Bean 
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 

Để @Value chú thích để làm việc PropertySourcesPlaceholderConfigurer nên được đăng ký. Nó được thực hiện tự động khi sử dụng <context:property-placeholder> trong XML, nhưng phải được đăng ký là static @Bean khi sử dụng @Configuration.

Xem @PropertySource tài liệu và Khung mùa xuân này Jira issue.

+2

Điều này hiệu quả! Tài liệu Spring @Configuration đã bỏ qua điều này. Dẫn đến tất cả sự nhầm lẫn này – Abe

+10

+1 - Xấu hổ, tôi dường như luôn quên điều này khi bắt đầu một dự án mới, và tôi tìm thấy câu trả lời này mỗi lần. – Bukes

+0

Đăng ký bean là "tĩnh" là chìa khóa cho tôi. Cảm ơn. – Arpit

Các vấn đề liên quan