dubbo--自定义注解spring扫描

来源:互联网 发布:linux命令more less 编辑:程序博客网 时间:2024/05/01 01:10

模块:dubbo-config-spring
包:com.alibaba.dubbo.config.spring
类:AnnotationBean
源码:

 public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)            throws BeansException {        if (annotationPackage == null || annotationPackage.length() == 0) {            return;        }        if (beanFactory instanceof BeanDefinitionRegistry) {            try {                // init scanner                Class<?> scannerClass = ReflectUtils.forName("org.springframework.context.annotation.ClassPathBeanDefinitionScanner");                Object scanner = scannerClass.getConstructor(new Class<?>[] {BeanDefinitionRegistry.class, boolean.class}).newInstance(new Object[] {(BeanDefinitionRegistry) beanFactory, true});                // add filter                Class<?> filterClass = ReflectUtils.forName("org.springframework.core.type.filter.AnnotationTypeFilter");                Object filter = filterClass.getConstructor(Class.class).newInstance(Service.class);                Method addIncludeFilter = scannerClass.getMethod("addIncludeFilter", ReflectUtils.forName("org.springframework.core.type.filter.TypeFilter"));                addIncludeFilter.invoke(scanner, filter);                // scan packages                String[] packages = Constants.COMMA_SPLIT_PATTERN.split(annotationPackage);                Method scan = scannerClass.getMethod("scan", new Class<?>[]{String[].class});                scan.invoke(scanner, new Object[] {packages});            } catch (Throwable e) {                // spring 2.0            }        }    }

dubbo是直接调用spring默认的扫描类,我们可以自定义扫描类,重新doScan方法,对每个BeanDefinitionHolder重新定义(利用FactoryBean的特性)

0 0