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.."...

  • 相关阅读:
    Thinkpad R400无线网络一个都不见了!
    如果使用安卓4.4的SD卡?
    如何使用安卓4.4的SD卡?
    在IAR使用FreeRTOS出现Error[Pa045]: function "XXX" has no prototype
    DSP5509的RTC实验-第3篇
    LWM2M简介-学习记录
    DSP5509的定时器实验-第2篇
    DSP5509的XF实验-第一篇
    华为LiteOS系统使用-任务调度函数-第一篇
    2017-12-24自选的股票之春秋航空
  • 原文地址:https://www.cnblogs.com/swave/p/14889517.html
Copyright © 2011-2022 走看看