gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:58:28 24 4
gpt4 key购买 nike

我在使用 Osgi 服务时遇到了 Spring-DM 和 @Autowired 的问题。我定义了一个 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-Service 确实在 Spring bean 注册表中......有什么想法我做错了吗?

仅供引用,我还尝试在setter上使用@ServiceReference注入(inject)OSGI服务,但Spring-DM从未注入(inject)它(有一些空指针异常)

最佳答案

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

关于java - Spring-DM OSGI 服务和 @Autowired 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13726205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com