要做到这一点,您需要提供自己的创建策略。此策略应用于所提供的服务(@Providers),而不应用于消费者端(@Requires)。
使用Apache Felix 4.2.1 iPOJO 1.11.0。
要求在用户请求时以编程方式创建组件实例。但是我不能在静态工厂方法中使用非静态字段。
@Component
@Provides(specifications = {IProcessSearch.class})
public class ProcessSearch implements IProcessSearch {
...
@Requires(filter = "(factory.name=ProcessSearch)")
private Factory mProcessSearchFactory;
...
/**
* Factory methods for receive new component instance:
*/
public static ProcessSearch createInstance() {
return createInstance(null);
}
public static ProcessSearch createInstance(Properties pProperties) {
InstanceManager lInstanceManager = (InstanceManager) mProcessSearchFactory.createComponentInstance(pProperties);
return (ProcessSearch) lInstanceManager.getPojoObject();
}
1) 如果我理解正确,那么带有@Requires注释的字段不能是静态的。如何创建获取属性并接收新组件实例的工厂方法?
2) 这样做正常吗?
更多信息:http://felix.apache.org/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/providing-osgi-services.html#service-服务对象创建