1

我有一次不知道如何继续前进。我有一个带有以下代码的课程

public class MyClass{

  private Class<? extends ValidationProvider> providerClass;
  //getter ans setter

}

Provider 类是在运行时传递的,并且可以有不同的实现,它只需要遵循上述合同? extends ValidationProvider

在我的实现中,我提供了一个属性,用户可以在其中传递提供者名称类,并基于此我需要继续前进。为了继续前进,我需要使用内置的依赖注入机制来获取提供者类的实例,例如

 public class MyClass{

      private Class<? extends ValidationProvider> providerClass;
      //getter ans setter

      public void setProvider(){
         providerClass=container.getInstance("type","name");
      }
    }

的签名container.getInstance("type","name");

 <T> T getInstance(Class<T> type, String name);

我不确定如何将类型传递给容器并获取提供者类的实例(因为提供者类具有签名<? extends ValidationProvider>)。

对于简单的用例,我可以这样做

container.getInstance(String.class,"my constant");

但不确定如何为我的用例做这件事在这方面的任何帮助将不胜感激。

4

1 回答 1

0

让我们退后一步......您的要求是MyClass应该可以通过不同的实现进行配置ValidationProvider,我从您的语法中假设它是一个超类。我认为您不需要泛型MyClass来实现这一目标:

public class MyClass{

    private ValidationProvider provider;

    public void setProvider(ValidationProvider _provider){
        this.provider = _provider;
    }
}

然后,如果(例如)通过在配置文件中具有确切提供程序实现的完全限定名称来实现配置,则可以MyClass如下设置您的实例:

...
String validatorClassName;
...
// Assign validatorClassName a value from a config file
...
ValidationProvider v = container.getInstance(Class.forName(validatorClassName), "blah");
myClass.setProvider(v);
于 2012-09-30T11:29:41.273 回答