【问题标题】:Issue with Spring-DM OSGI Service and @AutowiredSpring-DM OSGI 服务和@Autowired 的问题
【发布时间】:2023-04-07 02:02:01
【问题描述】:

我在使用 Spring-DM 和 @Autowired 与 Osgi 服务时遇到问题。 我已经定义了一个 Spring bean + OSGI 服务如下:

<bean id="my.sessionFactoryBean"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource">
            <ref local="my.dataSource" />
        </property>
            ...
</bean>
<osgi:service ref="my.sessionFactoryBean"
                id="my.sessionFactory" interface="org.hibernate.SessionFactory" />

我可以从另一个包中引用此服务,而不会在 xml bean 定义中出现任何问题,如下所示:

<beans>
...
    <osgi:reference id="my.sessionFactory"
        interface="org.hibernate.SessionFactory" />
..
    <bean id="my.databaseItemReader"
        class="my.MyReader">
        <property name="sessionFactory" ref="my.sessionFactory" />
...
</beans>

我的问题依赖于使用@Autowired 注释,如下所示:

public abstract class AbstractHibernateDao {

    @Autowired
    @Qualifier(value="my.sessionFactory")
    private SessionFactory sessionFactory;
    ...

我遇到了经典错误:

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.Sess
ionFactory my.AbstractHibernateDao.sessionFactory; nested exception is org.springfr
amework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.hibernate.SessionFactory] found for d
ependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {
@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qu
alifier(value=my.sessionFactory)}

如果我删除 @Qualifier,我会收到此错误:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [org.hibernate.SessionFactory] is defined: expected single matching bean but found 2: [my.sessionFactoryBean, my.sessionFactory]

这让我觉得我的 OSGI 服务确实在 Spring bean 注册表中...... 任何想法我做错了什么?

仅供参考,我也尝试在设置器上使用@ServiceReference 注入 OSGI 服务,但 Spring-DM 从未注入它(有一些空指针异常)

【问题讨论】:

    标签: java spring osgi autowired spring-dm


    【解决方案1】:

    只是一个猜测,但是当您使用@Autowire 时,您必须执行“context:component-scan”,而这反过来可能会找到正在显示的附加 bean (my.sessionFactoryBean)。使用 XML 注入时,可能未启用组件扫描,因此 OSGi 服务已正确解析。

    【讨论】:

      猜你喜欢
      • 2014-09-09
      • 2015-04-16
      • 2012-04-18
      • 2012-02-03
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多