1、包扫描加组件注解的方式如加入下列注解spring会把注解标注的类创建出来放入IOC容器

@Controller/@Service/@Repository/@Component
@Configuration //告诉spring这是一个配置类@ComponentScan(value = "com.ping")//value指定扫描的基础包public class ConfigDemo {}

2、使用`@Bean (导入第三方包里面的组件)

@Configuration //告诉spring这是一个配置类
public class ConfigDemo {

//IOC 容器中添加的组件默认是单实例的//给容器中注册一个Bean;类型为返回值的类型,id 默认是用方法名作为id@Bean(value = "Person")public Person person01(){    return new Person(18,"zhangsan");}

}

3、@Import (快速给容器中导入一个组件 id默认是组件的全类名)          @Import(要导入到容器中的组件);容器中就会自动注册这个组件,id默认是全类名          ImportSelector: 返回需要导入的组件的全类名数组          ImportBeanDefinitionRegistrar: 手动注册bean 到容器中          @Import({MyImportSelector.class, MyImportBeanDefinitionRegister.class})@Configurationpublic class ConfigDemo2 {}

/**
*自定义逻辑返回需要导入的组件
*/
public class MyImportSelector implements ImportSelector {

//返回值,就是导入到容器中的全类名//AnnotationMetadata: 当前标注@Import注解的类的所有注解信息@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {    //方法不要返回null值    return new String[]{"com.ping.entity.Color","com.ping.entity.Red"};}

}

/**

  • AnnotationMetadata: 当前类的注解信息
  • BeanDefinitionRegistry: BeanDefinition注册类
  • 把所有需要添加到容器中的bean 调用
  • BeanDefinitionRegistry.registerBeanDefinition 手动注册进来

*/
public class MyImportBeanDefinitionRegister implements ImportBeanDefinitionRegistrar {

public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry){    if(registry.containsBeanDefinition("com.ping.entity.Red")){        //指定Bean定义信息,(bean 的类型, Bean...)        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition("com.ping.entity.RainBow");        //注册一个bean 指定bean 名        registry.registerBeanDefinition("rainBow",rootBeanDefinition);    }}

}

4、使用spring 提供的FactoryBean (工厂bean)     默认获取到的是工厂bean调用getObject()创建的对象     要获取工厂Bean本身,我们需要给id前面加上一个&         &colorFactoryBean@Configurationpublic class ConfigDemo2 {    @Bean    public ColorFactoryBean colorFactoryBean(){        return new ColorFactoryBean();    }}//测试FactoryBean的类型和获取获取工厂bean本身 public static void main(String[] args) {    AnnotationConfigApplicationContext applicationContext =                new AnnotationConfigApplicationContext(ConfigDemo2.class);                        Object bean1 = applicationContext.getBean("colorFactoryBean");        Object bean2 = applicationContext.getBean("&colorFactoryBean");        System.out.println(bean1==bean2);        System.out.println("bean2的类型:"+bean2.getClass());