使用spring 自定義掃描bean


 在我們使用spring boot時候 spring會默認掃描啟動類所在包以及下級包的bean,但是我們又想掃其他的包 又不想放在啟動類的同級或子級包的時候該怎么做呢? 其實spring提供給了我們擴展接口的,這時候就可以實現BeanFactoryPostProcessor接口實現 postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)方法,入參是beanFactory,這時候我們就可以這樣寫,使用創建掃描器傳入注冊器 然后設置包名和包括的過濾器和排除的過濾器,再調用scan方法傳入包名(支持數組),然后通過實現ApplicationContextAware 接口獲取到應用上下文來getBean 測試

 1     @Override
 2     public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
 3 
 4         ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner((BeanDefinitionRegistry) beanFactory, true);
 5 
 6 //        scanner.addExcludeFilter(new TypeFilter() {
 7 //            @Override
 8 //            public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
 9 //                return true;
10 //            }
11 //        });
12 //        scanner.addIncludeFilter(new TypeFilter() {
13 //            @Override
14 //            public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
15 //                return true;
16 //            }
17 //        });
18         scanner.scan("com.demo");
19         DemoController demoController = context.getBean(DemoController.class);
20         System.out.println(demoController.hello());
21     }
 因為當前web環境使用的spring上下文實現了BeanDefinitionRegistry接口  registerBeanDefinition方法就會往容器中注冊 BeanDefinition 更詳細的查看源碼





ok

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM