• @Import


    SpringBoot@Enable*开头的注解底层依赖于@Import注解导入一些类,使用@Import导入的类会被Spring加载到IOC容器中,

    4种用法

    • 直接导入Bean就比较简单了,新建一个User
    public class User{
        private String name;
        private String address;
    }
    

    然后在启动类上使用@Import注解导入即可

    @SpringBootApplication
    @Import(User.class)
    public class Application {
        public static void main(String[] args) {
            ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
            System.out.println(context.getBean(User.class));
        }
    }
    

    这里需要注意的是,通过上下文获取Bean时,需要使用Bean的class,因为通过Bean的方式导入,Spring存入IOC容器,是用类的全类名存储的。可以使用上下文的getBeansOfType方法查看,返回的是Map对象。

    {com.tenghu.sbc.entity.User=User(name=null, age=0)}
    

    从返回的结果可以看出,key就是存的User的全类名。

    • 通过配置类导入Bean,创建一个配置类;
    public class UserConfig {
        @Bean(name = "user")
        public User user(){
            return new User();
        }
    }
    

    然后通过@Import导入这个配置类

    @SpringBootApplication
    @Import(UserConfig.class)
    public class Application {
        public static void main(String[] args) {
            ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
            System.out.println(context.getBean(User.class));
        }
    }
    

    通过配置类的方式可以在配置类里面定义多个Bean,当导入配置类时,配置类下定义的Bean都会被导入。

    • 导入ImportSelector实现类
    public class MyImportSelector implements ImportSelector {
        @Override
        public String[] selectImports(AnnotationMetadata annotationMetadata) {
            return new String[]{User.class.getName()};
        }
    }
    

    实现ImportSelector类,必须实现selectImports,然后返回需要导入的Bean。与上面一样使用@Import导入这个实现类。

    @Import(MyImportSelector.class)


    • 导入ImportBeanDefinitionRegistrar实现类
    public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
        @Override
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
            BeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(User.class).getBeanDefinition();
            registry.registerBeanDefinition("user",beanDefinition);
        }
    }
    

    使用方式一样,通过@Import导入

    @Import(MyImportBeanDefinitionRegistrar.class)
  • 相关阅读:
    Swift中的设计模式
    ios应用view之间数据传递的方式
    关于iOS多线程,你看我就够了
    iOS开发-21UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解
    iOS蓝牙4.0开发例子
    工作记录8:iOS 传值问题总结(7种传值完美介绍)
    iOS 各种传值方式
    iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)
    Swift类与结构、存储属性、计算属性、函数与方法、附属脚本等
    源码推荐(7.17):不规则按钮类似于遥控器按钮,一个可以最大程度简化PageView与TabView切换的第三方框架
  • 原文地址:https://www.cnblogs.com/smallfa/p/15126726.html
Copyright © 2020-2023  润新知