如何仅使用注释在Controller中读取属性文件? Spring MVC

时间:2015-05-22 06:05:44

标签: java spring spring-mvc

如何仅使用注释在Controller中读取属性文件?

属性文件包含(env.properties):

 document.portal.path=http://flana.gost.com/service

Spring Controller:

@Controller
@RequestMapping("/kap/*")
@SessionAttributes({"user", "KapForm", "activity"})
public class KapController {
@Value("${document.portal.path}")
private String URL; 
}

没有其他事情可做。在XML中,我们使用占位符,我没有得到如何介绍它。所以我得到例外。

Injection of autowired dependencies failed; 

2 个答案:

答案 0 :(得分:1)

你可以通过两种方式实现它

选项1

在config类中放置@PropertySource并为PropertySourcesPlaceholderConfigurer定义一个bean,如下所示 -

@Configuration
@PropertySource("classpath:someFile.properties")
public class SampleConfig { 

    // other configs...

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

选项2

在config类中直接指定PropertyPlaceholderConfigurer的bean并提供属性文件的名称为ClassPathResource

@Configuration
public class SampleConfig {

    // other configs...

    @Bean
    public static PropertyPlaceholderConfigurer placeHolderConfigurer(){
      PropertyPlaceholderConfigurer placeHolderConfigurer = new PropertyPlaceholderConfigurer();
      ClassPathResource[] cpResources = new ClassPathResource[]
              { new ClassPathResource( "someFile.properties" ) };
      placeHolderConfigurer.setLocations(cpResources);
      placeHolderConfigurer.setIgnoreUnresolvablePlaceholders(true);
      return placeHolderConfigurer;
    }
}

请注意,占位符的bean定义必须为static java docs以下摘录

  

必须特别考虑返回Spring @Bean(BFPP)类型的BeanFactoryPostProcessor方法。由于BFPP对象必须在容器生命周期的早期实例化,因此它们可能会干扰@Autowired类中@Value@PostConstruct@Configuration等注释的处理。要避免这些生命周期问题,请将BFPP返回@Bean方法标记为静态

答案 1 :(得分:0)

另一种出路是

import org.springframework.context.MessageSource;
@Autowired
private MessageSource messageSource;
cutiePie = messageSource.getMessage("cutie.pie.property", new Object[] {},"cutie.pie.property", LocaleContextHolder.getLocale());