我有一个用@Component和@Service注解的类。从豆容器得到这个类的实例通常使用的方法是使用@Reference:Spring-Roo:如何按名称或编号检索组件实例?
@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);
}
我不应该需要添加每个子类中的引用,能够通过他们的名字找到他们。
如果我正确理解了这个问题,它与osgi声明的服务有关,而不是spring。但我不知道为什么会有一个spring-roo标签:-) –
spring-roo标签是因为我正在开发一个插件。 Spring Roo插件使用OSGi功能,而Roo shell使用osgi命令安装它们。 – Rafa