浪迹天涯
web报表设计器....
posts - 61,comments - 71,trackbacks - 0

第一步:定义服务的配置文件(指定服务名和服务路径)

<? xml version = " 1.0 "  encoding = " gb2312 " ?>
<!-- DOCTYPE service - config SYSTEM  " service.dtd " -->
< service - config >
    
<!--  用户服务  -->
    
< service name = " UserService "   class = " com.xainfor.service.UserService "  template = " normal "   />
    
< service name = " GnmkService "   class = " com.xainfor.service.GnmkService "  template = " normal "   />
</ service - config >  

第二步:系统初始化是将所有服务名和路径加载到一个静态的HashMap中

public   class  ServiceConfig  {
    
    
public   static  HashMap serviceMap  =   new  HashMap();
    
    
public   static  String getService(String serviceName)  {
        String serviceClass 
=   "" ;
        serviceClass 
=  ServiceConfig.serviceMap.get(serviceName).toString();
        
return  serviceClass;
    }

}


第三步:定义一个接口类

public   interface  Service  {
 
public   void  execute();
}
第四步:服务实例化类
public class ServiceExecuteHelper {
    
    
/**
     * 日志处理
     
*/

    
private static final MsgLogger logger = MsgLogger.getLogger();
    
     
public static void execute(String servicename) {
         
try {
            
//验证服务是否存在
            String servicClass = ServiceConfig.getService(servicename);
            
//如果服务存在就加载服务信息
            if (servicClass != null && !servicClass.equals("")) {
                Class classObject 
= Class.forName(servicClass);
                Service service 
= (Service) classObject.newInstance();
                
service.execute();                            
            }
 else {
                logger.info(
"服务["+servicename+"]未定义");
            }

        }
 catch(Exception e) {
            logger.info(
"服务["+servicename+"]不存在!");
        }

     }

}
第五步:定义接具体服务并实现接口类
public class GnmkService implements Service {

    
/* (non-Javadoc)
     * @see com.xainfor.service.Service#println()
     
*/

    
public void execute() {
        
// TODO Auto-generated method stub
        System.out.println(
"执行的是GnmkService");
    }


}
public class UserService implements Service {
    
    
public void execute() {
        
// TODO Auto-generated method stub
        System.out.println("执行的是UserService");
        
    }

}
第六步:测试类
public class testService {
   
    
public static void main(String [] temp) {
      ServiceExecuteHelper.execute("UserService");
   }

}
posted on 2007-11-19 15:48 JJCEA 阅读(4192) 评论(16)  编辑  收藏 所属分类: java日记

FeedBack:
# re: java通过服务名动态实例化对象并调用指定方法
2007-11-20 08:45 | 隔叶黄莺
IOC组件像Spring不就是很好的帮助你完成这些事情的吗  回复  更多评论
  
# re: java通过服务名动态实例化对象并调用指定方法
2007-11-20 09:30 | 我的java生涯
我是在做一个统一消息认证平台,不想太多的用第三方的东西.  回复  更多评论
  
# re: java通过服务名动态实例化对象并调用指定方法
2007-11-20 15:22 | feilong
请问服务的配置文件是自己解析吗?  回复  更多评论
  
# re: java通过服务名动态实例化对象并调用指定方法
2007-11-20 16:40 | 隔叶黄莺
统一消息认证用Ldap,一般应用服务器只需配置就行了,都不需要编码实现  回复  更多评论
  
# re: java通过服务名动态实例化对象并调用指定方法
2007-11-20 17:59 | 我的java生涯
服务的配置文件是自己解析@feilong
是自已解析的,代码如下:
public class ReadService {

public String readService(String value) {
String fileName = "/service.xml";
String classname = "";
try {
ReadXML readXmlBean = new ReadXML();
String file = java.net.URLDecoder.decode(this.getClass().getResource(fileName).toString(), "UTF-8");
file = file.substring(file.indexOf(":") + 1, file.length());
readXmlBean.readXML(file);//读取指定路径的XML文件
Document doc = readXmlBean.getXmlDoc();
Element root = doc.getRootElement();
java.util.List lsTable = root.getChildren();//得到根节点下的所有子节点
for (Iterator iterTable = lsTable.iterator(); iterTable.hasNext(); ) {
Element elTable = (Element) iterTable.next();
if (value.equals(elTable.getAttributeValue("name"))){
classname = elTable.getAttributeValue("class");
break;
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
return classname;
}  回复  更多评论
  
# re: java通过服务名动态实例化对象并调用指定方法
2007-11-20 18:01 | 我的java生涯
我们这个主要是消息发送的接收,附件发送,接收,包括权限等数据的传送  回复  更多评论
  
# re: java通过服务名动态实例化对象并调用指定方法
2008-01-03 13:42 | CGF
# re: java通过服务名动态实例化对象并调用指定方法
2008-01-03 13:42 | CGF
# re: java通过服务名动态实例化对象并调用指定方法
# re: java通过服务名动态实例化对象并调用指定方法

只有注册用户登录后才能发表评论。


网站导航: