spring注入Bean的七种方式

方式一

直接xml 注入    不举例了

方式二

 配合包扫描@ComponentScan   使用@Controller @Service @Component 等方式注入 可以使用excludeFilters 排除扫描包下某些类

注意 在springboot应用下  默认扫描包位置 springboot启动类所在包及其子包

spring注入Bean的七种方式

 像图示这种情况下  F H这两个类 都被我加了 @Component 他们也在包扫描下的位置下  如果使用excludeFilters 可以排除某个类进容器

方式三

配合@Import  值为某个类

例如

@Import({A.class})  A这个类不用任何注解 就可加入容器中

方式四

配合@Import  @Import({B.class})  值为某个类  这个类实现ImportSelector  注意这个类不会注入到容器中  但是B1会注入到容器中

//若实现了此接口 则这个类不会呗注入到容器中   配合@Import注解使用
public class B implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        //annotationMetadata 为@import所在那个类的注解
        return new String[]{"com.pps.back.frame.pupansheng.entity.B1"};
    }
}

方式五

配合@Import  @Import({C.class})  值为某个类  这个类实现ImportBeanDefinitionRegistrar  注意这个类不会注入到容器中  但是C1会注入到容器中  并且这种方式可以得知容器其他的类

public class C implements ImportBeanDefinitionRegistrar {

    @Override
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry  beanDefinitionRegistry) {

        Arrays.stream(beanDefinitionRegistry.getBeanDefinitionNames()).forEach(System.out::println);

        RootBeanDefinition beanDefinition=new RootBeanDefinition(C1.class) ;
        beanDefinitionRegistry.registerBeanDefinition("pps",beanDefinition);

    }
}


方式六
保证某个类可以注入到容器中   这个类实现 FactoryBean 接口  那么 容器中不仅有这个类 还有其接口实现返回的类
//                                            用容器的getBean(&+name) 可以得到具体类  不加& 得到是工厂类 当然可以直接使用@Autowired注解到容器中

  如下:容器中不仅有 DBeanFactory  还有DB

@Configuration
public class DBeanFactory implements FactoryBean {
    @Override
    public Object getObject() throws Exception {
        return new DB();
    }

    @Override
    public Class<?> getObjectType() {
        return DB.class;
    }

    @Override
    public boolean isSingleton() {
        return true;
    }
}



方式七(springboot环境)
使用@EnableConfigurationProperties  加上 @ConfigurationProperties(要注入的类) 即可注入  (自动配置常用到)
不举例了