Qi4J 涉及部分实现

  • 本文关键字:实现 Qi4J apache-zest
  • 更新时间 :
  • 英文 :


是可以这样结束的

    ServiceChild (class) extends (or only partial implements) Service and overrides sayHello
    Service (interface) implements hello,goodbye
    Hello (has a mixin HelloMixin) has method sayHello
    Goodbye (has a mixin GoodbyeMixin) has method sayGoodbye

我尝试使用服务儿童中的关注方法执行上述操作

    public class ServiceChild extends ConcernOf<Service> implements Hello 
 {
    @Override
    public String sayHello() {
     return "Rulle Pharfar";
    }
 }

但是,使用这种方法时,java 只会检测到 Hello 实现,而不会检测到 Service 类中的其余内容。那么还有其他可行的方法吗?

我不确定我是否理解您要做什么,但是应该更多地将关注点视为对它所关注的类的原始实现的包装器。如文档所述:

关注点是在调用之间共享的无状态片段,它充当对 Mixin 调用的拦截器。

并且通常会这样做:

//Given interface MyStuff
@Mixins( MyStuff.Mixin.class )
@Concerns( MyStuffConcern.class )
public interface MyStuff
{
    public void doStuff();
    abstract class Mixin implements MyStuff
    {
       public void doStuff()
       {
          System.out.println( "Doing original stuff." );
       }
    }
}
public class MyStuffConcern extends ConcernOf<MyStuff>
   implements MyStuff
{
   public void doStuff()
   {
     // if I want to do anything before going down the call chain I'll do it here
     System.out.println( "Doing stuff before original." );
     // calling the next concern or actual implementation
     next.doStuff();
     // anything to do after calling down the call chain - here is the place for it
     System.out.println( "Doing stuff after original." );
   }
}

但是,如果您对接口有顾虑,您还应该实现所述接口:

public abstract class ServiceChild extends ConcernOf<Service> implements Service
{
   public String sayHello()
   {
       return "Rulle Pharfar";
   }
}

希望这有帮助。

我也不完全理解这个问题。

正如Arvice所说,关注相当于AOP中的围绕建议,具有更精确的切入点语义。尽管从技术上讲,关注点"包装"潜在的关注点/混合是正确的,但我宁愿不将其视为"包装器"而是"拦截器"。处理的是传入呼叫。概念上略有不同,可能并不适合所有人。

关注点(无状态)和 Mixins(有状态)也有可能只在它们覆盖的接口中实现方法的子集,只需使类"抽象"即可。Qi4j 将填充缺失(和未使用)的方法调用。并且可以使用任何组合。

此外,实施良好的问题应该称为"下一个",因为它们应该不知道它们的实际用途。如果关注点需要处理方法调用。每个复合类型方法都必须有一个 Mixin,否则组装将失败。

简而言之; 1. 一个 Mixin 实现可以实现零个(又名私有混音),一个或多个复合类型接口的方法。 2. 关注点可以实现复合类型接口的一个或多个方法。

同样有趣的是,当一个类(mixin 或关注点)调用复合类型接口中自己的方法之一时,调用将不是类内调用,而是从外部调用复合,因此调用整个调用堆栈,以确保内部调用和外部调用在结果上相同。如果需要绕过模式,则存在模式。

相关内容

  • 没有找到相关文章

最新更新