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. 在Java中获取类层次结构?
- 4. NSView - 获取超视图层次结构
- 5. Spring Security角色层次结构@Secured JavaConfig
- 6. 层次结构
- 7. 如何从层次结构中获取属性? (读)
- 8. 如何使用SQL CTE获取完整层次结构
- 9. 如何获取层次结构中的哪个视图?
- 10. 如何在Fortran中获取子例程调用层次结构?
- 11. JSON层次结构,如何获取元素?
- 12. 如何使用层次结构获取td的值?
- 13. 如何使用BookmarksManager.Chrome获取书签层次结构?
- 14. 如何获取java类的层次结构字段的字段?
- 15. 如何在rails中获取我的模型的层次结构
- 16. 如何获取数组中元素的层次结构路径
- 17. 数组中的层次结构(php) - >如何获取父项?
- 18. 获取文件夹结构层次结构的最佳数据结构?
- 19. radgridview层次结构
- 20. UIView层次结构
- 21. 类层次结构
- 22. 给定层次结构中的任何子项,通过INFORMIX层次结构获取完整树SQL
- 23. 层次结构在SQL Server - 多层次
- 24. 如何设计类层次结构
- 25. 如何使用RPG类层次结构?
- 26. Castor:如何映射Java层次结构
- 27. 如何在层次结构中显示,,
- 28. 如何迭代类层次结构?
- 29. 如何显示Maven POM层次结构?
- 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