如何在使用库时强制执行特定的类?

时间:2014-03-25 08:49:40

标签: java spring frameworks cdi

我正在编写一个应该包装一些例程的小框架。我以Spring为基础,使用@Autowired。在我的框架中,我连接了interfaceabstract类。因此,当使用框架作为依赖时,实现项目可以提供实际的实现。

但是:我如何强迫任何使用我的框架的人必须实现一个特定的界面(当然除了文档)?

有办法吗?

框架类的示例:

interface IFoo {
   void run();
}


abstract class Bar {
   @Autowired private Ifoo ifoo;


   void routine() {
       ifoo.run();
   }
}

实施项目:我可以强制用户:

class CustomBar extends Bar

或:CustomFoo implements IFoo

我的目标是编写某种模板引擎框架。那么这个依赖的用户只需要通过实现某些接口或抽象类来提供逻辑,而不必关心我创建的模板框架中包含的执行逻辑。

2 个答案:

答案 0 :(得分:3)

  

我可以强制用户:

   class CustomBar extends Bar
     

或:

   CustomFoo implements IFoo ?

他们无法避免。让我们依次看看它们:

为了向您的框架提供Bar的实例,他们必须创建实例。但Bar无法实例化,它是一个抽象类(您将其声明为abstract class Bar)。要创建一个实例,对其进行子类化,然后创建子类的实例。

同样,IFoo是一个接口。您无法实例化接口。要创建使用该接口的实例,您来定义实现该接口的类,然后创建该类的实例。

当然你也想要记录事情,但是通过创建类abstract并使用接口,如果他们想要创建实例以传递到框架中,那么就强迫它们进行子类化/实现。

答案 1 :(得分:1)

我认为你必须记录你的框架: 要做一个特定的想法,你必须创建一个实现特定接口的类。 (如在春季文档中)