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

  • 相关阅读:
    在chrome插件开发中,如何executeScript多个content script文件
    [Silverlight]MVVM+MEF框架Jounce练习(1)
    EF的日期运算
    【silverlight】Silverlight TreeViw默认展开节点
    singleton pattern简单随笔
    Design pattern形象比喻
    C#简单选择排序
    回文算法
    C#插入排序
    Jquery调用存储过程实例
  • 原文地址:https://www.cnblogs.com/swave/p/14889517.html
Copyright © 2011-2022 走看看