最近要做一个工作流的为使用的业务系统提供的调用java Api接口 ,其中
我想把这些使用工作流的方法写在一个interface里,然后所有真正的调用实现的代码所在的class都来implements它.问题就是,java中规定"interface中只能有方法的声明,不能有方法体",也就是说interface里的方法都
是"空的",根本不能把调用的实现逻辑写进interface的方法中!只能给出方法的声明,如果我只给别业务系统公开这些java接口,别的系统能否通过这些java接口方法的调用,从而调用了实现该接口的类的那些方法吗??
例如象:
1、ejb中的远程接口里面的所有方法都是可以直接调用的呀(这些接口的方法的实际是在ejb的bean类中)通过ejb接口方法调用,实际是调用了ejb的bean中的相应方法来实现的!
或者象
2、java基础api类包的中的接口一样,比如象javax.servlet.servletContext接口里面的所有方法都是可以直接用的呀,而且可以实现相应的功能!
 我怎样也能作的象这样!希望高手指点!
先谢谢!
分不够还加!

解决方案 »

  1.   

    你说的还是符合java 接口的概念,象EJB,javax.servlet.servletContext等的接口中调用方法其实应该是调用容器实现的接口来实现这些方法的功能而已!
    也就是这些东西是隐式的,不是我们能从表面看出的,实际上这些都是在容器中自动调用这些接口的实现类来完成相关功能的!
    个人理解!
    这个可以参照工厂模式和自省反射机制来模拟实现!
      

  2.   

    同意楼上的。
    EJB等的接口都是在容器中自动链接的和管理的。
    如果真要实现这样的需求,可以参考反射机制。
      

  3.   

    在运行期查询类信息的一个原动力是“远程方法调用”(RMI),它允许Java程序使用分布的对象。
    在Java中,Class类可以支持“反射”的概念。针对Field,Method以及Constructor类,它们都新增了一个库:java.lang.reflect。这些类型的对象都是JVM在运行期创建的,用于代表未知类里对应的成员。这样便可用构建器创建新对象,用get()和set()方法读取和修改与Field对象关联的字段,以及用invoke()方法调用与Method对象关联的方法。此外,我们可调用方法getFields(),getMethods(),getConstructors(),分别返回用于表示字段、方法以及构建器的对象数组。因此,匿名对象的类信息可在运行期被完整的揭露出来,而在编译期间不需要知道任何东西。
    通过“反射”同一个未知类型的对象打交道时,JVM只是简单地检查那个对象,并调查它从属于哪个特定的类。但在这之后,在我们做其他任何事情之前,Class对象必须载入。因此,用于那种特定类型的.class文件必须能由JVM调用(要么在本地机器内,要么可以通过网络取得)。所以RTTI和“反射”之间唯一的区别就是对RTTI来说,编译器会在编译期打开和检查.class文件;但对“反射”来说,.class文件在编译期间是不可使用的,而是由运行期环境打开和检查。