首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring-DM OSGI服务和@Autowired的问题

Spring-DM OSGI服务和@Autowired的问题
EN

Stack Overflow用户
提问于 2012-12-05 23:08:46
回答 1查看 2K关注 0票数 1

我正面临着Spring-DM和@Autowired with Osgi Services的问题。我定义了一个Spring bean + OSGI服务,如下所示:

代码语言:javascript
复制
<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定义中没有任何问题,如下所示:

代码语言:javascript
复制
<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,如下所示:

代码语言:javascript
复制
public abstract class AbstractHibernateDao {

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

我得到了一个典型的错误:

代码语言:javascript
复制
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)}

如果我删除@限定符,我会得到这个错误:

代码语言:javascript
复制
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-Service确实存在于Spring bean注册表中……你知道我做错了什么吗?

仅供参考,我还试图在setter中使用@ServiceReference注入OSGI服务,但Spring-DM从未注入过它(有一些nullpointerexception)

EN

回答 1

Stack Overflow用户

发布于 2012-12-06 06:49:04

这只是一种猜测,但是当你使用@Autowire时,你必须执行"context:component-scan“,而这反过来可能会找到正在显示的额外bean (my.sessionFactoryBean)。当使用XML注入时,可能没有启用组件扫描,因此OSGi服务得到了正确的解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13726205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档