`
498320858
  • 浏览: 386742 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

项目运行期间热插拔接口实现类

    博客分类:
  • java
 
阅读更多

需求来源:

 

在一个移动广告平台中,需要在广告平台运行期间接入app广告主;广告主要求app的推广效果的流程为,广告平台中发现有用户下载app时候,广告平台需要将此下载数据上报给广告主服务器;app安装激活时广告服务器会将此安装数据和下载数据对比,如果广告平台有上报此app的下载的话则视为此app的激活时广告平台的推广效果

 

但是问题在于一个广告平台需要对接多个广告主,而每个广告主对上报的接口定义都不相同,所以广告平台无法对上报下载数据这个过程做统一处理,只能为每个广告主写一个上报模块,但是这个模块如何接入正在运行的项目呢?这里我期望能有一个支持热插拔的模块实现在不停机的情况下增加不同的上报模块(增加广告主的接入代码)。

 

解决思路:

 

1.编写一个类加载器以及一个上报接口

2.依据一个参数值让类加载器去加载指定文件位置的上报接口的实现类,并实例化为上报对象(可加优化,如将此对象缓存,避免创建重复对象)

3.上报对象执行上报方法

 

 

具体实现(demo见附件):

1.在项目1中实现思路中的1,接口以及类加载器

2.运行1(DynamicClassLoader中的main)

3.将项目1中的接口拷贝至项目2中,并实现接口,并编译得到class文件

4.将此class文件拷贝到正在运行的项目1的运行目录(按照项目路径完整的放置)中

5.项目1类加载器传入类的文件路径以及class名称

6.类加载器实例化新加入的类,并强制类型转换为接口对应的对象

7.对象执行接口中定义的方法

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics