2013-03-13 4 views
7

Я пытаюсь получить свойства из файла .properties в объекте моего приложения. Мое единственное знание о том, как это сделать, - это объект Environment.Как autowire объект Spring Environment

Он отлично работает в моей конфигурации ...

@Configuration 
@ComponentScan(basePackages = { 
     "com.production" 
}) 
@PropertySource(value = { 
     "classpath:/application.properties", 
     "classpath:/environment-${FETTER_ENVIRONMENT}.properties" 
}) 
@EnableJpaRepositories("com.production.repositories") 
@EnableTransactionManagement 
public class Config { 
    private static final String PROPERTY_NAME_DATABASE_URL = "db.url"; 
    private static final String PROPERTY_NAME_DATABASE_USER = "db.user"; 
    private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password"; 

    private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect"; 
    private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = "hibernate.format_sql"; 
    private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql"; 
    private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan"; 

    @Resource 
    Environment environment; 

Но я пытаюсь сделать это в другом классе, и это нуль. Я пробовал использовать @Resource и @Autowired и ручную инъекцию.

Есть ли что-то особенное в отношении Environment, что предотвращает это?

@Component 
public class Vendor { 
    private String token; 

    @Autowired 
    private Environment environment; 

    public Vendor() { 
     //get token from config 
     //Environment environment = (Environment) ApplicationContextProvider.getApplicationContext().getBean("environment"); 
     setToken(environment.getProperty("api.vendor.token")); 
    } 

    public String getToken() { 
     return token; 
    } 

    public void setToken(String token) { 
     this.token = token; 
    } 
} 

Update: Я нашел this resource, который подчеркивает использование @Value, но я не использую любой конфигурации XML в моем приложении.

Похоже, что это может быть то, что я ищу: Loading properties in Spring 3.1 programmatically

+0

Я не думаю, что окружающая среда имеет отношение в чем-либо, кроме контекста приложения нагрузки. –

+0

Есть ли другой способ получить элементы конфигурации из .properties файлов? – Webnet

+1

Замечание '@ Value' приходит на ум, но вам придется настроить« PropertyPlaceholderConfigurer ». Не цитируйте меня на этом, но посмотрите. –

ответ

9

Вы должны использовать @Value annotaion для него. Но прежде чем требуется объявить <context:property-placeholder в xml.

Для получения более подробной информации см. here.

Кроме того, еще один способ:

@Inject 
ApplicationContext context; 
...... 
Enviroment env = context.getEnvironment(); 
4

Вы можете использовать весной @Autowired аннотацию, как показано ниже, но убедитесь, что вы аннотировать класс с @Component или аналогичными.

@Autowired 
Environment env; 

Кроме того, убедитесь ваш боб открыт для сканирования, то есть он должен быть внутри com.production пакета в вашем случае. компонент сканирования должен быть включен как этот

<context:component-scan base-package="com.production"/> 

или

@ComponentScan(basePackages = {"com.production"})