OSGI的新手。
我在OSGI中使用spring-boot。在bundle activator中,spring-boot应用程序成功启动。我有一个组件类如下
@Service // spring-boot annotation
@Component(immediate = true) // osgi annotation
public class Test {
@Activate
public void activate() {
System.out.println("osgi component activated");
}
@Reference
public void set(ServiceComponentXXX a) {
System.out.println("reference got");
}
Test类仅绑定服务,不受任何其他绑定。 ServiceComponnetXXX类来自其他bundle。永远不会执行activate和set方法。
删除spring-boot批注@Service后,代码工作正常。所以问题是一个类可以是一个spring-boot组件还是一个OSGI组件?
让一个类成为两者并没有多大意义。春季启动和声明性服务的生命周期是完全独立的。所以在最好的情况下,你最终得到了两个类的实例 - 一个由spring boot填充,另一个由声明式服务填充 - 但它更可能是它不起作用。
我建议你决定是否要去OSGi。如果是,则jut使用声明性服务而不是spring boot。通常决定一个注射框架。在OSGi中,您可以通过bundle获得一个注入框架,但它们必须兼容OSGi。 Spring启动并不是真正的OSGi兼容。