Java Tapestry5在扩展类中使用服务。

Java Tapestry5在扩展类中使用服务。,java,tapestry,Java,Tapestry,我是tapestry5用户,有一个关于在扩展类中使用服务的问题。假设我有以下的类结构 基类 public class BaseClassImpl extends ExtendedOneClass implements BaseClass { @Inject private ServiceOne serviceOne; } 扩展类 public class ExtendedOneClass extends ExtendedTwoClass { @Inject priv

我是tapestry5用户,有一个关于在扩展类中使用服务的问题。假设我有以下的类结构

基类

public class BaseClassImpl extends ExtendedOneClass implements BaseClass {

   @Inject
   private ServiceOne serviceOne;
}
扩展类

public class ExtendedOneClass extends ExtendedTwoClass {

   @Inject
   private ServiceTwo serviceTwo;
}
扩展二类

public class ExtendedTwoClas {

   @Inject
   private ServiceThree serviceThree;
}
我需要做什么才能使用扩展类中的服务

我是这样设置AppModule的

public static void bind(ServiceBinder binder) {
    binder.bind(BaseClass.class, BaseClassImpl.class);
    binder.bind(ExtendedOneClass.class);
    binder.bind(ExtendedTwoClass.class);
}

但我似乎无法让服务在扩展类中工作。我假设这是因为扩展类没有被tapestry的@Inject实例化。因此,问题是如何完成此任务?

使用构造函数注入并将服务传递给父构造函数:

public class BaseClassImpl extends ExtendedOneClass implements BaseClass
{
   private HibernateSessionSource hibernateSessionSource;

   public BaseClassImpl(SystemEnvironment systemEnvironment, LinkSource linkSource, 
                        HibernateSessionSource hibernateSessionSource)
   {
       super(systemEnvironment, linkSource);
   }
}
无论如何,您的设置将无法工作,您需要在此设置中添加服务ID,否则您将有多个服务实现同一接口。这将有助于:

binder.bind(ExtendedOneClass.class).withId("ext1");
与此相结合:

@InjectService("ext1")
private ExtendedOneClass extendedOneClass;