spring掃描自定義註解並進行操作
今天又個需求,就是根據註解來判斷是否介面為對外開放,那麼啟動spring容器的時候把這些註解修飾的bean name放進快取當中。
/**
* 掃描註解新增服務到快取以供判斷時候為對外開放service
*/
@Component
@Lazy(true)
class AnnotationScannerConfigurer implements BeanDefinitionRegistryPostProcessor {
ArrayList<String> cache=RemoteCache.getCache();
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory postProcessBeanFactory) throws BeansException {
Map<String, Object> map=configurableListableBeanFactory.getBeansWithAnnotation(RemoteTag.class);
for (String key : map.keySet()) {
cache.add(key);
//System.out.println("beanName= "+ key );
}
}
}
我的AnnotationScannerConfigurer 實現了BeanDefinitionRegistryPostProcessor ,spring啟動時會執行postProcessBeanFactory方法,通過postProcessBeanFactory我們就可以拿到@RemoteTag所修飾的bean了。然後隨你怎麼操作。
使用BeanDefinitionRegistryPostProcessor 是從mybaties的spring掃描實現類得到靈感的。
注意:@Lazy(true)是因為最後載入才能確保把所有@RemoteTag修飾的bean得到並進行操作。