4
A
回答
0
在這裏,豆工廠particualr豆是一個BeanFactoryPostProcessor
示例實現,可以幫助你在這裏:
class CollaboratorsFinder implements BeanFactoryPostProcessor {
private final Object bean;
private final Set<String> collaborators = new HashSet<String>();
CollaboratorsFinder(Object bean) {
if (bean == null) {
throw new IllegalArgumentException("Must pass a non-null bean");
}
this.bean = bean;
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
for (String beanName : BeanFactoryUtils.beanNamesIncludingAncestors(beanFactory)) {
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
if (beanDefinition.isAbstract()) {
continue; // assuming you're not interested in abstract beans
}
// if you know that your bean will only be injected via some setMyBean setter:
MutablePropertyValues values = beanDefinition.getPropertyValues();
PropertyValue myBeanValue = values.getPropertyValue("myBean");
if (myBeanValue == null) {
continue;
}
if (bean == myBeanValue.getValue()) {
collaborators.add(beanName);
}
// if you're not sure the same property name will be used, you need to
// iterate through the .getPropertyValues and look for the one you're
// interested in.
// you can also check the constructor arguments passed:
ConstructorArgumentValues constructorArgs = beanDefinition.getConstructorArgumentValues();
// ... check what has been passed here
}
}
public Set<String> getCollaborators() {
return collaborators;
}
}
當然,還有很多其他的東西(如果你還想捕獲原始bean的代理或其他)。 而且,當然,上面的代碼是完全未經測試的。
編輯: 要使用這個,你需要在你的應用程序上下文中聲明它爲一個bean。正如你已經注意到的那樣,它需要你的bean(你想監視的那個bean)被注入它(作爲構造器參數)。
由於您的問題涉及到「bean hiearchy」,我編輯了整個層次...IncludingAncestors
以查找bean名稱。另外,我認爲你的bean是一個單例,並且可以將它注入後處理器(雖然理論上postProcessor應該在其他bean之前初始化 - 需要看看它是否實際工作)。
0
如果你正在尋找合作豆你可以嘗試實現BeanFactoryAware
0
只是爲了延長大衛的答案 - 當你實現了BeanFactoryAware - 你參考BeanFactory,你可以用它來主要是查詢存在通過BeanFactory.ContainsBean(String beanName).
相關問題
- 1. 如何在jsp中獲得spring安全角色層次結構?
- 2. IDE如何獲得類層次結構
- 3. NSView - 獲取超視圖層次結構
- 4. 在Java中獲取類層次結構?
- 5. CTE遞歸獲取樹層次結構
- 6. Spring Security角色層次結構@Secured JavaConfig
- 7. Spring上下文層次結構
- 8. Spring Security角色層次結構問題
- 9. 層次結構
- 10. 獲取用於按層次結構表結構的DAO
- 11. 如何使用SQL CTE獲取完整層次結構
- 12. 如何使用層次結構獲取td的值?
- 13. 如何獲取數組中元素的層次結構路徑
- 14. 如何在rails中獲取我的模型的層次結構
- 15. 如何從層次結構中獲取屬性? (讀)
- 16. JSON層次結構,如何獲取元素?
- 17. 數組中的層次結構(php) - >如何獲取父項?
- 18. 如何獲取此查詢的層次結構級別
- 19. Drupal菜單 - 如何獲取層次結構
- 20. 如何獲取層次結構的最後一個非空值?
- 21. 如何從SQL Server的多個值獲取層次結構?
- 22. 如何獲取層次結構中的哪個視圖?
- 23. 如何在Fortran中獲取子例程調用層次結構?
- 24. 如何獲取java類的層次結構字段的字段?
- 25. 如何使用BookmarksManager.Chrome獲取書籤層次結構?
- 26. 如何構建層次結構?
- 27. 獲取文件夾結構層次結構的最佳數據結構?
- 28. radgridview層次結構
- 29. UIView層次結構
- 30. 類層次結構
你的意思是,如果'A'被注入'B'和'C',那麼你想問'API'爲'B'和'C',給定'A'? – skaffman 2011-03-31 09:43:33
你能否改進這個問題?是否有可能讓你的bean註冊爲「匿名」bean?你的豆可以由FactoryBean生產嗎?如果在2個或更多 appContexts/beanFactories之間建立了一個層次結構,那麼也要考慮到您的bean可能被注入到子appContexts/beanFactories中。 另外,正如Costi已經提到的,可能會出現這樣的情況,即您的bean被代理。 – 2011-03-31 11:39:15