捆绑包激活后未激活OSGI组件

时间:2019-04-10 08:43:28

标签: spring-boot osgi

OSGI的新功能。

我在OSGI中使用spring-boot。在捆绑软件激活器中,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来自其他捆绑软件。永远不会执行activate和set方法。

删除spring-boot注释@Service后,代码可以正常工作。所以问题是,一个类可以既是spring-boot组件又是OSGI组件?

1 个答案:

答案 0 :(得分:4)

让一个类同时成为两者并没有什么意义。 Spring Boot和声明性服务的生命周期是完全分开的。因此,在最好的情况下,您最终会得到该类的两个实例-一个实例由spring boot填充,另一个实例化由声明式服务填充-但很有可能它根本不起作用。

我建议决定是否要使用OSGi。如果是,则请使用声明式服务,而不要使用Spring Boot。通常,决定一个注射框架。在OSGi中,您可以捆绑使用一个注入框架,但是它们必须与OSGi兼容。 Spring Boot并非与OSGi真正兼容。