【发布时间】:2016-02-12 10:12:24
【问题描述】:
我有一个用@Component 和@Service 注释的类。从 beans 容器中获取此类实例的常用方法是使用 @Reference:
@Reference private MyClass myclass;
如何使用字符串键检索实例,就像我们在 Spring Web 应用程序中使用 ApplicationContext 一样?我试过 ComponentContext.locateService 但我不知道这是否正确也不知道我必须使用哪个键值。
MyClass myclass = (MyClass)context.locateService("????"); //Which is the way?
我编辑了我的问题,我会尽力解释得更好。 我有这样的课:
@Component
@Service
class MySvcImpl implements MySvc { ... }
以这种方式注入:
class Main {
@Reference private MySvc svc;
void method1(){
svc.doXXX();
}
}
在这种情况下,我只有一个班级。我想要一堆组件子类(MySvcSubX),以便我可以根据参数使用它们中的任何一个。据称,我不再需要 @Reference 行了。
@Component
@Service
class MySvcSub1Impl extends MySvcImpl implements MySvc { ...}
//The same with MySvcSub2Impl, 3, and so forth
然后在我的主课中:
void method1(String key){
MySvc svc = callToLocateBeanById(key);
}
我不需要为每个子类添加一个引用,以便能够通过它们的名称找到它们。
【问题讨论】:
标签: java osgi spring-roo