读取配置文件动态创建对象[C++]

本文转自http://jnn.blogbus.com/logs/1879300.html

 

 

问题的由来

使用过Log4J 的朋友应该有这样酷的体会,通过修改配置文件可以很方便得实现对应用程序的日志行为进行定义,而这些都不需要修改任何的应用程序代码。也许你会说,这些在Java中是很容易实现的(使用classforname 就可以很容易实现了)。

 

 

但是对于使用C++来进行日常开发的朋友,如果要实现这样的功能又如何来做呢?因为C++语言本身并不支持这样的通过读取配置文件动态创建对象的功能。

 

 

Log4Cplus  中,使用C++来这种动态配置生成对象的功能,它是怎么实现呢?要知道C++可没有类似于javaclass loader以及 reflection 机制,看来需要自己动手来实现通过读取配置产生合适的logger appender对象了。

 

 

好在Log4Cplus是一个为C++开发的开源logger库,它实现了一个C++版的Log4J。我们可以通过分析它来探究一下C++实现读取配置文件动态创建对象实现原理。  

 

 

分析功能,通过读取配置文件后获得需要加载的信息内容,然后通过相关对象实例模块来实现对象实例化操作。

 

 

初步分析系统通过读取配置文件来负责加载相关的类实例因此分析可以从配置模块内部入手实现基本的初始化分析。

 

 

通过分析源代码目录发现与系统配置相关的对象有以下几部分内容

 

 

 

 

Properties

PropertyConfigurator

BasicConfigurator

 

 点击查看原始尺寸

重点分析 PropertyConfigurator中的相关代码模块。

下面将结合PropertyConfigurator中的实例来进行分析

如何实现Appender的动态可配置功能

--需要分析方法实现

--- initializeLog4cplus();

 

---configureAppenders();

 

---configureLoggers();

 

---configureAdditivity();

 

 

代码部分

 

 

 

 

 

 

 

 

 

通过这种方式来实现 

              AppenderFactoryRegistry

 

              LayoutFactoryRegistry

 

              FilterFactoryRegistry

 

的初始化工作 – 如果要加入新的类型的数据的支持,需要将这部分的内容也要实现

 

       

 

 如何利用Registry中的内容来实现对象数据的创建?

 

注意

 

得到的指针内容都是Factory中定义的内容,

 

通过调用Factory方法来获取具体的能够使用的对象的实例

 

AppenderFactory返回的指针是SharedAppenderPtr

 

 

这两者之间有什么样的区别联系?

通过auto_ptr可以知道对象实例在返回之后,需要将对象的生命周期交给外部的使用者,由使用者负责堆对象实例的析构工作.

 

 

分析成果

配置文件的定义实现,包含的基本类,以及这些类的实现.

对于实现的动态配置的考虑:

1.  通过生成RegistryFactory完成所有需要加载的对象的工厂方法的初始化,

2.  分析配置文件来实现不同方法的调用的实现

3.  加载完成Configure文件之后,既实现的基本的数据的获取和采集功能.

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值