2017-02-10 12 views
2

必要なすべてのクラスでloadProperties()を呼び出すよりも良い方法はありますか?複数のクラスでapplication.propertiesをロードする正しい方法は何ですか?

public void loadProperties() { 
    InputStream inputStream; 
    prop = new Properties(); 
    String propFileName = "application.properties"; 

    inputStream = getClass().getClassLoader().getResourceAsStream(propFileName); 

    if (inputStream != null) { 
     try { 
      prop.load(inputStream); 
     } catch (IOException e) { 
      LOGGER.error("Error: ", e); 
     } 
    } 
} 

私は春が@valueアノテーションでこの機能を提供します知っているが、あなたは@Serviceとしてクラスをマークする場合にのみ機能します。これはのようには見えませんが way

+0

なぜ手動でロードする必要がありますか?また、どのSpring Beanでも '@ Service'アノテーション付きBeanのみに作用します。 –

答えて

1

春になる方法:最初のメソッド Javaコードで@Valueアノテーションを使用してコンフィグレーションファイルの値をロードする方法があります。クラス@Component、@Service、 @Controller、例えば@Repository :

@Component("fileUpload") 
public class FileUploadUtil implements FileUpload { 

private String filePath; 
@Value("#{prop.filePath}") 
public void setFilePath(String filePath) { 
    System.out.println(filePath); 
    this.filePath = filePath; 
} 

bean.xml

<bean id="prop" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
<property name="locations"> 
    <array> 
    <value>classpath:public.properties</value> 
    </array> 
</property> 
</bean> 

第二の方法:例えば、構成ファイル を使用:

<context:property-placeholder location="classpath:conn.properties"/> 
<bean id="dataSource" class="${dataSource}"> 
<property name="driverClass" value="${driverClass}" /> 
<property name="jdbcUrl" value="${jdbcUrl}" /> 
<property name="user" value="${user}" /> 
<property name="password" value="${password}" /> 
</bean> 

私はこれらの2つの方法が最も簡単だと思います。 2番目の方法は柔軟性がありません。 プロパティを使用しているJavaではコードの冗長性が許されますが、このメソッドを抽出することもできます。

0

本当に@Valueアノテーションを使用するのが最善の方法です。それはどんな春で動作するが、あなたはプロトタイプスコープのBeanを使用してアプリケーションを使用してインスタンス化できるサービスはないクラスの場合は @Component、@Service、@Controller、@Repository

0

のようにBeanを管理していること

注意関数内のコンテキスト。

applicationContext.getBean("aScopedBean"); 

通常の非シングルトンJavaオブジェクトのようなもので、スプリングコンテキストから必要なBeanを備えています。

マップにプロパティを追加する場合は、環境を挿入することができます。

@Autowired 
private Environment env; 
... 
env.getProperty("a_property"); 

@Autowireを一般的に避けたい場合は、ユーティリティ関数またはクラスを実装する必要があります。

関連する問題