zoukankan      html  css  js  c++  java
  • Spring自定义实现ImportBeanDefinitionRegistrar引入外部类

    import java.io.IOException;
    
    import org.springframework.beans.factory.support.BeanDefinitionRegistry;
    import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
    import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
    import org.springframework.core.type.AnnotationMetadata;
    import org.springframework.core.type.classreading.MetadataReader;
    import org.springframework.core.type.classreading.MetadataReaderFactory;
    import org.springframework.core.type.filter.TypeFilter;
    
    public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    
        @Override
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
            ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(registry);
            TypeFilter typeFilter = new TypeFilter() {
                @Override
                public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
                  return true;
                }
            };
            scanner.resetFilters(false);
            scanner.addIncludeFilter(typeFilter);
            scanner.scan("com.xxx.xxx.web.jetty.extend");
        }
    
    }
    package com.xxx.xxx.web.jetty.extend;
    
    import org.springframework.beans.factory.InitializingBean;
    
    public class MyIncludeBean implements InitializingBean{
    
        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("MyIncludeBean:init");
        }
    
    }

    自定义Import

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    @Documented
    @Import(MyImportBeanDefinitionRegistrar.class)
    public @interface MyImport {
    
    }

    让@MyImport配置生效

    @MyImport
    @Component
    public class NoAnnotionBean implements InitializingBean{
    
        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("NoAnnotionBean..");
        }
    
        
    }

    虽然MyIncludeBean没有被spring的各种注解(@Component、@Service等注解),但是通过自定义MyImport的动态注入进spring容器中,顺利进入spring中,控制台成功打印"NoAnnotionBean.."...

  • 相关阅读:
    javascript中数据属性的一些小结
    求教BFC的一些疑惑
    snowinmay.net学习运用
    4月份总结(二)
    瀑布流布局浅析(转)
    JS函数的参数(arguments)的使用(形参和实参)
    网页布局什么时候用图片背景,什么时候用img标签?
    chrome,ff浏览器默认行高
    盒模型中的内容讨论
    Cow Pedigrees(△)
  • 原文地址:https://www.cnblogs.com/swave/p/14889517.html
Copyright © 2011-2022 走看看