2015-08-18 43 views
2

我一直在使用的BeanPostProcessor有了Spring,我如何獲得具有特定實例的類的列表?

@Override 
    public Object postProcessBeforeInitialization(final Object bean, final String beanName) throws BeansException 
    { 
     log.info("postProcessBeforeInitialization bean : " + beanName); 
     if (bean instanceof TestAware) 
     { 
      testaware.add(((TestAware) bean).getClass()); 
      log.info("Added testAware bean : " + beanName); 
     } 
     return bean; 
    } 

但問題試過了,還有哪些沒有bean定義一些類。 是否有任何替代或改進的方式獲得。 在此先感謝。

+0

看一看[思考](https://code.google.com/p/reflections/) –

+0

感謝您的建議,是沒有什麼辦法可對上述方法湊合。 – Abhilash

回答

0

如果你想獲得一個亞型的所有實例的應用程序上下文那麼它很簡單,通過他們看:

@Component 
public class GetSubtypesOfClass implements ApplicationContextAware { 

@Override 
    public void setApplicationContext(ApplicationContext ac) throws BeansException { 
     List<Subtype> matches = new ArrayList<>(); 
     for (String s : ac.getBeanDefinitionNames()) { 
      Object bean = ac.getBean(s); 
      if (Subtype.class.isAssignableFrom(bean.getClass())) { 
       matches.add(bean); 
      } 
     } 
    } 
} 

然而,如果你想知道爲什麼你的子類型的實例都沒有得到發在應用程序上下文中可用,那麼您將需要在上下文xml中顯式加載它們,或者通過類路徑掃描隱式加載它們。

0

假設你問如何找到TestAware

亞型建議由它的名字,BeanPostProcessor只有「進程」春季管理的bean,從doc

廠掛鉤,允許自定義修改新的bean實例

因此,您在這裏使用了錯誤的工具。你或許應該使用一些反射到你想要的東西,例如,使用Reflections

// adapted from the home page sample 
Reflections reflections = new Reflections("your.package"); 
Set<Class<? extends TestAware>> testAwares = reflections.getSubTypesOf(TestAware.class); 

注:上面的示例代碼會給你亞型,不亞型的實例。

相關問題