Trong blueprint.xml
, tôi tuyên bố một sự phụ thuộc tùy chọn theo cách này:Kế hoạch chi tiết: làm cách nào để kiểm tra xem liệu phụ thuộc tùy chọn có được thỏa mãn không?
<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>
và trong RepositoryImpl
, tôi có
public void setRepositoryListener(RepositoryListener repositoryListener) {
logger.info("Repository listener set");
this.repositoryListener = repositoryListener;
}
Phương pháp này được gọi bằng Blueprint ngay cả khi không có dịch vụ RepositoryListener
sẵn, như mong đợi . Vấn đề là, làm thế nào tôi có thể kiểm tra sau liệu có là một dịch vụ không?
if (repositoryListener != null) {
repositoryListener.notifyDelete(node);
} else {
logger.warn("No repository listener set!");
}
không làm việc, kể từ repositoryListener
không phải là null
, nhưng một proxy Blueprint.
Kiến thức hạn chế về phía tôi, nhưng có cái gì đó gọi là có thể được chỉ định cho và có thể được liên kết với bean 'Repository' của bạn. –