Spring中添加组件到IOC容器的五种方式

  1. 可以直接使用@Bean注解。

  2. 可以使用注解@CompentScan包扫描将带有@controller @Service @Compent注解的类会扫描到IOC容器中。

  3. 使用@Import注解(3种用法)。

一、第一种用法
@Configuration
@Import(value = {Person.class)
public class MyConfig {

}
二、第二种方式实现ImportSelector 接口
@Configuration
@Import(value = {MySelector.class})
public class MyConfig {

}



public class MySelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return new String[]{"com.example.zookeeper.entity.Student"};
    }
}



public class Demo {

    public static void main(String[] args) {

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
        String[] beanDefinitionNames = context.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println("BeanName:" + beanDefinitionName);
        }

    }
}


student的构造方法执行了
...
BeanName:myConfig
BeanName:com.example.zookeeper.entity.Student
三、第三种方式
@Configuration
@Import(value = {Person.class, MySelector.class, MyImportRegistrar.class})
public class MyConfig {

}



public class MyImportRegistrar implements ImportBeanDefinitionRegistrar {

    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        //自定义一个BeanDefinition
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Teacher.class);
        //将这个BeanDefinition注册到BeanFactory的beanDefinitionMap中
        registry.registerBeanDefinition("teacher", rootBeanDefinition);
    }

}



teacher的构造方法执行了...
...
BeanName:myConfig
BeanName:teacher
\color{green}{luoli 一名互联网的吊车尾} 欢迎大家指出理解有误的地方,会及时修改,谢谢!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。