找回密码
 FreeOZ用户注册
查看: 1321|回复: 9
打印 上一主题 下一主题

Open Source一个简单的配置文件实现

[复制链接]
跳转到指定楼层
1#
发表于 28-11-2009 12:49:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
我自己写的,功能不强,但很实用。我已经分别在Java Application,
Swing Application, Java Web Application和Android Application上
用过这个库,还算好用,所以共享给大家。

源代码下载:
svn co http://bravereader.googlecode.com/svn/trunk/tools/BraveUtil

编译环境是NetBeans,也可以直接用ant来编译。

评分

参与人数 1威望 +50 收起 理由
ubuntuhk + 50 你太有才了!

查看全部评分

回复  

使用道具 举报

2#
 楼主| 发表于 28-11-2009 12:54:21 | 只看该作者
使用方法:

1. 编写一个配置用的model类POJO,比如
  1. public class MyAppConfig {
  2.   private String myPath;
  3.   private String yourName;

  4.   /* getters and setters */
  5.   ...
  6. }
复制代码
2. 实现一个定制的Application类,建议写成这样:
  1. public class MyApplication {
  2.   private static MyApplication app;

  3.   private GenericApplication<MyAppConfig.class> ga;

  4.   private ... //Singleton MyApplication

  5.   public static synchronized MyApplication getInstance(){
  6.     ...
  7.   }

  8.   //delegate ga 中的getConfig()和setConfig()函数出来

  9.   //其他你需要实现的东西
  10. }
复制代码
回复  

使用道具 举报

3#
 楼主| 发表于 28-11-2009 12:56:10 | 只看该作者
表面上看来这东西有点复杂,但这个框架只需要一次写成,以后你要添、减配置,只需要改动
Config Model类就行了。

另外这个东西还支持Annotation来设置配置项,如果你在意配置文件的具体内容,可以做一些调整。
回复  

使用道具 举报

4#
 楼主| 发表于 28-11-2009 13:00:27 | 只看该作者
Servlet中的实现。我的做法是这样:

1. Concrete Application类:
  1. public class VideoServerApplication {
  2.     private final GenericApplication<VideoServerConfig> genericApp =
  3.             GenericApplication.getApplication(VideoServerConfig.class);

  4.     private static VideoServerApplication app;

  5.     private final ServletContext servletContext;

  6.     private VideoServerApplication(ServletContext sc){
  7.         this.servletContext = sc;
  8.     }

  9.     public static synchronized VideoServerApplication getApplication(ServletContext sc){
  10.         if(app == null){
  11.             app = new VideoServerApplication(sc);
  12.             app.genericApp.setConfigHomeDir(sc.getRealPath("/") + "/WEB-INF");
  13.         }
  14.         return app;
  15.     }
  16.     public static VideoServerApplication getApplication(){
  17.         if(app == null)
  18.             throw new IllegalArgumentException("Application should be initialized by a ServletContext");
  19.         return app;
  20.     }

  21.     public void setConfig(VideoServerConfig cc) {
  22.         genericApp.setConfig(cc);
  23.     }

  24.     public VideoServerConfig getConfig(boolean reload) {
  25.         return genericApp.getConfig(reload);
  26.     }   
  27. }
复制代码
2. Context Listener
  1. public class VideoServerInitListener implements ServletContextListener{

  2.     public void contextInitialized(ServletContextEvent sce) {
  3.         VideoServerApplication app = VideoServerApplication.getApplication(sce.getServletContext());
  4.     }

  5.     public void contextDestroyed(ServletContextEvent sce) {

  6.     }
  7. }
复制代码
3. web.xml配置
  1.     <listener>
  2.         <description>Service Initialization</description>
  3.         <listener-class>com.braveo.video.config.VideoServerInitListener</listener-class>
  4.     </listener>
复制代码
4. 调用方法
  1.     VideoServerApplication app = VideoServerApplication.getApplication();
  2.     VideoServerConfig vsc = app.getConfig(true);

  3.     out.println("<h1>" + vsc.getVideoTargetPath() + "</h1>");

  4.     vsc.setVideoSourcePath("C:\\video");   
  5.     app.setConfig(vsc);
复制代码
回复  

使用道具 举报

5#
发表于 29-11-2009 08:44:22 | 只看该作者
Key啊,你干活的速度超快。这又是个啥东东。没看明白啊。 你是不是想在java中读XML的配置文件?
配置文件不一定非要放在XML里,放在Properties文件不是更方便吗
回复  

使用道具 举报

6#
 楼主| 发表于 29-11-2009 08:51:54 | 只看该作者
这个本来就是properties来的,用xml的形式存放的properties。
我实现的目标是配置的可读写。采用

Generic Application <----------Concrete Application
  ^
  |
  v
Configuration Manager <----->  Concrete Configuration

这样的模式来实现。其中Generic Application和Configuration Manager是通用的,
Concrete Configuration是一个POJO,用来存放你的配置选项。理论上Concrete Configuration应该可以支持各种简单类型,
但我暂时只实现了String类型的存放。我另一套东西实现了很多类型,但有点复杂,算了。

Concrete Application是你要实现的一个类,实现从Concrete到Generic之间的Delegatation。

事实上这套东西实现得不是太好,从理论上讲,比如我还需要做个DAO之类的分层,
只是我从一开始就只是想写个简单的配置文件读写的东西,没有必要弄得太复杂。

原帖由 mayabin 于 29-11-2009 09:44 发表
Key啊,你干活的速度超快。这又是个啥东东。没看明白啊。 你是不是想在java中读XML的配置文件?
配置文件不一定非要放在XML里,放在Properties文件不是更方便吗

评分

参与人数 1威望 +30 收起 理由
ubuntuhk + 30 谢谢分享!

查看全部评分

回复  

使用道具 举报

7#
发表于 29-11-2009 09:33:35 | 只看该作者
回复  

使用道具 举报

8#
发表于 29-11-2009 11:02:31 | 只看该作者
key现在上班的吧
我感觉key肯定就像好莱坞电影里面那种geek,业余时间都是扑在电脑上的,要不然每天下了班之后花几个小时上网打打游戏,花点时间吃饭,就没时间搞出这么多东西来了。
大多数东西都只是在构想阶段。
回复  

使用道具 举报

9#
 楼主| 发表于 29-11-2009 11:17:47 | 只看该作者
最近是有点geek,过段时间买个电子琴回来,玩电子琴键盘好了

原帖由 someonehappy 于 29-11-2009 12:02 发表
key现在上班的吧
我感觉key肯定就像好莱坞电影里面那种geek,业余时间都是扑在电脑上的,要不然每天下了班之后花几个小时上网打打游戏,花点时间吃饭,就没时间搞出这么多东西来了。
大多数东西都只是在构想阶段。
回复  

使用道具 举报

10#
发表于 30-11-2009 02:29:25 | 只看该作者

回复 #9 key 的帖子

key还会玩电子键盘啊,牛
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 7-5-2025 02:42 , Processed in 0.043336 second(s), 27 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表