【问题标题】:How can I use services in another service inside one and the same bundle(module)?如何在同一个包(模块)内的另一个服务中使用服务?
【发布时间】:2026-02-10 21:55:01
【问题描述】:

我在项目中有 2 个小伙伴。当第一个捆绑包启动时,第二个捆绑包使用它的服务。但是如何在 bundle 内的 service 中使用 service?

<service ref="EMUtilService" interface="domain.access.EMUtil"/>

    <bean id="EMUtilService" class="domain.access.impl.EMUtilImpl" scope="singleton">
        <jpa:context unitname="access" property="entityManager"/>
        <tx:transaction method="*" value="RequiresNew"/>
    </bean>

    <service ref="userService" interface="domain.access.UserService"/>

    <bean id="userService" class="domain.access.impl.UserServiceImpl" scope="singleton">
    </bean>

我想在userService 或其他简单的类中使用EMUtilService

我的EMUtilService

public class EMUtilImpl implements EMUtil {
    private EntityManager entityManager;

    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Override
    public EntityManager getEntityManager() {
        return entityManager;
    }
}

我在这个服务中初始化 EntityManager 并在其他类中使用它。

【问题讨论】:

    标签: java osgi osgi-bundle blueprint-osgi


    【解决方案1】:

    Blueprint 很大程度上受到 Spring(它是 Spring DM 的继承者)的启发,因此,它支持将 bean/服务注入其他 bean 的相同语法。您可以在 bean 定义上添加一个 id,然后将此 bean 注入另一个 bean 的属性中:

    <bean id="mybean" class="my.package.MyClass"/>
    
    <bean id="myService" class="my.package.MyService">
       <property name="myProperty" ref="mybean"/>
    </bean>
    

    【讨论】:

      最近更新 更多