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得到并進行操作。
總結
以上是生活随笔為你收集整理的spring扫描自定义注解并进行操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mavengradle 依赖指定版本范围
- 下一篇: gradle打包 执行类方法