捆绑激活后OSGI组件未激活

问题描述 投票:0回答:1

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
1个回答
4
投票

让一个类成为两者并没有多大意义。春季启动和声明性服务的生命周期是完全独立的。所以在最好的情况下,你最终得到了两个类的实例 - 一个由spring boot填充,另一个由声明式服务填充 - 但它更可能是它不起作用。

我建议你决定是否要去OSGi。如果是,则jut使用声明性服务而不是spring boot。通常决定一个注射框架。在OSGi中,您可以通过bundle获得一个注入框架,但它们必须兼容OSGi。 Spring启动并不是真正的OSGi兼容。

© www.soinside.com 2019 - 2024. All rights reserved.