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

  • 相关阅读:
    切割自动贴标机功能、原理与常见问题回答
    WINCE中蓝牙扫描模块现10050,控制器无法找到错误的解决思路
    在WINCE中基于ActiveSync的Socket通信 c#
    cs关于房间分配
    JS判断单、多张图片加载完成
    在网站中添加 React
    tcp读取数据的方法
    微软发布2011年耐用消费品行业微软CRM解决方案 一方水土
    Microsoft Dynamics CRM4.0介绍 一方水土
    徐工集团再度携手瑞泰搭建Call Center管理平台 一方水土
  • 原文地址:https://www.cnblogs.com/swave/p/14889517.html
Copyright © 2011-2022 走看看