【发布时间】:2012-06-03 09:03:46
【问题描述】:
在blueprint.xml 中,我以这种方式声明了一个可选依赖项:
<reference id="RepositoryListener"
interface="ru.focusmedia.odp.server.datastore.api.RepositoryListener"
availability="optional" />
<bean id="Repository"
class="ru.focusmedia.odp.server.datastore.jpa.repository.RepositoryImpl">
<jpa:context property="entityManager" unitname="ODP_Server" />
<tx:transaction method="*" value="Required" />
<property name="repositoryListener" ref="RepositoryListener" />
</bean>
在RepositoryImpl,我有
public void setRepositoryListener(RepositoryListener repositoryListener) {
logger.info("Repository listener set");
this.repositoryListener = repositoryListener;
}
正如预期的那样,即使没有可用的RepositoryListener 服务,Blueprint 也会调用此方法。问题是,我以后如何检查是否有 服务?
if (repositoryListener != null) {
repositoryListener.notifyDelete(node);
} else {
logger.warn("No repository listener set!");
}
不起作用,因为 repositoryListener 不是 null,而是蓝图代理。
【问题讨论】:
-
我的知识有限,但是可以为
指定一个称为 的东西,并且可能链接到您的 Repositorybean。
标签: osgi blueprint-osgi