Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


Property Utility Examples
 
프로젝트시에 xml이 아닌 Properties클래스를 이용한 환경설정 및 데이터로드에 대한 내역을 factory및 object에 대한 메모리 저장을 이용하여 효과적으로 읽어낼 수 있는 방안을 마련해보도록 한다. ( 2003/03/01 ) 451
Written by ienvyou - 최지웅
2 of 2
 
자 이제 그러면 위의 static intializer부분에서 접근을 시도하는 
factory클래스를 보도록 하자. 팩토리는 말그대로 공장이다. 즉 어떠한 부분에 있어서
객체에 대한 생성을 담당하는 클래스라고 볼수도 있다. 기본적인 디자인패턴에서는
내가 원하는 클래스에 대한 newInstance를 호출하도록 하고 있는 보통 우리는 
String의 문자열을 이용하여 해당 클래스의 이름을 가지고 reflection을 이용하여 생성하는
것이 일반적인 형태이다.

아래는 PropertyFactory클래스의 소스파일이다.


package com.common.util;

import java.util.Properties;
import java.util.Hashtable;
import java.io.FileInputStream;


public class PropertyFactory {
	private static Hashtable propertyTable = new Hashtable();
	private static PropertyFactory factory;

	//우선 여기서 사용하는것은 4개의 프로퍼티를 사용하는 것으로 
	//가정을 한다. (query, environment, webpages, message);
	private Properties query;
	private Properties environment;
	private Properties webPages;
	private Properties message;

	public Hashtable getLoadProperties() {
		if(factory==null){
			synchronized(PropertyFactory.class){
				factory = new PropertyFactory();
				propertyTable = factory.init();
			}
		}
		return propertyTable;
	}

	//해당 프로퍼티파일들을 로딩한다.
public synchronized Hashtable init() {

//Properties Class를 상속받은 클래스의 객체를 정의하여 
//그 타입으로 만든후 로딩을 시도하도록 한다.
CommonProperties prop = new PropertiesImpl();

try{
	for(int i = 0 ; i < Constant.propertyArray.length; i++){
		String name = Constant.propertyArray[i];
		FileInputStream fin = new FileInputStream(name + ".properties");
		prop.load(fin);
		
		//나중에 지우세요.
		prop.list(System.out);
		
		fin.close();
		propertyTable.put(name, prop);
	}
}catch(Exception e) {
	System.out.println("File Not Found in Factory.init()");
}


return propertyTable;
}
};
		
위의 init()메소드에서는 실제 프로퍼티파일을 파일로 부터 입력을 받도록 하고 있는데
확장자 .properties에 대한 디렉토리의 정보를 모두 읽어들어 그 갯수만큼을 
property table에 입력시키는 과정을 보여주고 있다. 
CommonProperties클래스는 Properties클래스를 상속받은 우리가 정의하고자 하는 
새로운 형태의 클래스를 위하여 오버라이딩시키기 위한 클래스이며, 
customizing되어져 있는 클래스이다.

CommonProperties클래스는 abstract클래스로서 각각에 대한 proxy의 역할을 할 수 있다고
보아도 무방할 것이며,  실제의 구현체는 PropertiesImpl클래스이다.
아래에 소스코드를 나열할 것이다.

* CommonProperties.java

package com.common.util;

import java.util.Properties;
import java.util.Hashtable;
import java.io.IOException; 
import java.util.Enumeration;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;

public abstract class CommonProperties extends Properties{

public void load(InputStream inStream) {
	try{
		super.load(inStream);
	}catch(IOException e) {
		System.out.println("IOException in Properties when loading...");
	}
}

public String getProperty(String key) {
	return super.getProperty(key);
}

public String getProperty(String key, String defaultValue){
	return super.getProperty(key, defaultValue);
}

public void list(PrintStream out) {
	super.list(out);
}

public void list(PrintWriter out) {
	super.list(out);
}
public Enumeration  propertyNames() {
	return super.propertyNames();
}
public Object setProperty(String key, String value) {
	return super.setProperty(key, value);
}

public void store(OutputStream out, String header)
	throws IOException {
	super.store(out, header);
}
	   
	   
public abstract void init(String propertyFile) 
	throws Exception;

public abstract void init(String propertyFile, String encType)
	throws Exception;

public  abstract String[] getStringArray(String propertyName);

public abstract  boolean getBoolean(String propertyName);

public abstract  int getInt(String propertyName);

public abstract double getDouble(String propertyName);

public abstract  long getLong(String propertyName);

public abstract  String getString(String propertyName);

public abstract  void setString(String propertyName, 
		String propertyValue);


}


나머지 PropertiesImpl.java는 reference의 소스코드를 참조하기 바란다.

위와 같은 형태의 프로퍼티를 이용하여 보통 웹에 대한 작업을 하게 된다면
간단하게 환경설정등에 대한 속성값들을 읽어낼수 있으며, 쉽게 이용할 수 있다는
특징을 가지게 될것이다.


	
Written by carouser 2001-07-12
 
1 2
References
 
This article Source Code : properties.zip
Copyright ⓒ 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD