題目: IOC 后臺機制學習
給定:
配置文件 config.txt, 文件內容
className = test.JavaBean1
field = username
value = ABC
該文件中的三個值會隨時可能變化, 唯一不變的是 className 指定的都是一個 JavaBean(為了簡化, 我們假定里面已經有一個 username 屬性, 例如:
class JavaBeanxxxx {
?? ?private String username;
?? ?public String getUsername() {
?? ??? ?return username;
?? ?}
?? ?public void setUsername(String uname) {
?? ??? ?this.username = uname;
?? ?}
}
要求: 寫一段代碼, 讀取配置文件 config.txt, 然后實現把 className 指定的 JavaBean 類加載(注意這個類名是可以修改的, 可配置的), 然后生成一個實例,
并把配置文件中field字段指定的值作為這個實例的屬性名(這里是username)所對應的值設置為 ABC(字符串), 并且要讀出最后設置的值.
初學Java,題目是老Bean出的,感謝老Bean對我的指導
以下是答案:
package?com.gcoresoft.ioc;

import?java.io.*;
import?java.lang.reflect.*;
import?java.util.*;
import?java.beans.*;


public?class?IOCStudy?
{
????
??
????private?Properties?prop=new?Properties();
??????//Load?the?properties?file
????public?void?loadPropFile(String?filename)

????
{
????????try

????????
{
????????????FileInputStream?fin=new?FileInputStream(filename);
????????????prop.load(fin);
????????????fin.close();

????????}catch(Exception?e)
{
????????????System.out.println(e.toString());
????????}
????}
????
????private?String?getValueByName(String?Name)

????
{
????????return?prop.getProperty(Name);
????}
????
????public?static?void?main(String[]?args)

????
{
????????IOCStudy?ioc=new?IOCStudy();
????????ioc.loadPropFile("E:\\Work\\GetInIOC\\src\\com\\gcoresoft\\ioc\\Config.txt");
????????try

????????
{
????????????Class?bean=Class.forName(ioc.getValueByName("className"));

????????????try?
{
????????????????java.beans.BeanInfo?info=java.beans.Introspector.getBeanInfo(bean);
????????????????java.beans.PropertyDescriptor?pd[]=info.getPropertyDescriptors();

????????????????try?
{
????????????????????Method?mSet=null,mRead=null;
????????????????????Object?obj=bean.newInstance();
????????????????????for(int?i=0;i<pd.length;i++)
????????????????????????if(pd[i].getName().equalsIgnoreCase(ioc.getValueByName("field")))

????????????????????????
{
????????????????????????????mSet=pd[i].getWriteMethod();
????????????????????????????mRead=pd[i].getReadMethod();????????????????????????????
????????????????????????}

????????????????????try?
{
????????????????????????mSet.invoke(obj,?ioc.getValueByName("value"));
????????????????????????String?str=(String)mRead.invoke(obj,?null);
????????????????????????System.out.println(str);

????????????????????}?catch?(IllegalArgumentException?e)?
{
????????????????????????//?TODO?Auto-generated?catch?block
????????????????????????e.printStackTrace();

????????????????????}?catch?(InvocationTargetException?e)?
{
????????????????????????//?TODO?Auto-generated?catch?block
????????????????????????e.printStackTrace();
????????????????????}

????????????????}?catch?(InstantiationException?e)?
{
????????????????????//?TODO?Auto-generated?catch?block
????????????????????e.printStackTrace();

????????????????}?catch?(IllegalAccessException?e)?
{
????????????????????//?TODO?Auto-generated?catch?block
????????????????????e.printStackTrace();
????????????????}

????????????????

????????????}?catch?(IntrospectionException?e)?
{
????????????????//?TODO?Auto-generated?catch?block
????????????????e.printStackTrace();
????????????}
????????????
????????????

????????}catch(ClassNotFoundException?e)
{
????????????System.out.println(e.toString());
????????}
????????
????}
????
}

---------------------------------------------------------
專注移動開發
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
posted on 2007-03-30 20:39
TiGERTiAN 閱讀(226)
評論(0) 編輯 收藏 所屬分類:
Java