栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

Spring Boot 添加Bean

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot 添加Bean

注:上节我们利用@Bean或者其他注解往Spring容器中添加一个Bean,下面我们看一下向Spring容器中添加Bean的几种方式。

@Bean
    @Bean
    public User user(){        return new User();
    }

通过@Bean注解可往容器中添加Bean组件,默认方法名为bean的Id,如果要特殊指定其名称,可以使用@Bean("user"),详细参考上一节

包扫描+@Component与其延伸注解

其实在项目中多用包扫描的方式,向容器中添加组件,可以在主配置类上,@Configuration和@ComponentScan,@ComponentScan默认扫描当前类所在的包,所以在Spring Boot程序中,一般主程序类会建立在项目的根包中,然后利用@SpringBootApplication标注,@SpringBootApplication是一个组合注解包括@SpringBootConfiguration@EnableAutoConfiguration、@ComponentScan三个注解,其中就包含@ComponentScan注解,@ComponentScan还有其他属性,详细查看上一小节。

@Conditional
@Conditional注解是根据条件往容器中注册Bean,它可以注册在方法和类上,在SpringBoot自动配置中,广泛利用@Conditional注解和它的延伸注解,往Spring容器中进行动态注册。@ConditionalOnClass如果有这个类才注册,@ConditionalOnMissingBean如果没有这个Bean组件才注册等等。

@import1) @import

在容器中导入组件还可以通过@import导入组建,例如:

@Configuration@ComponentScan@import(User.class)public class MainConfig {

}

如果使用@import导入组件,导入的组件ID为其全类名。

2) importSelector

@import组件的value如果是实现了importSelector接口,可以通过该类批量导入组件,该类的selectimports方法的返回值,将会被注册到Spring容器中,但该类本身并不会被导入到组件中。

3) importBeanDefinitionRegistrar

通过实现该类往容器中注册一个Bean,例如

public class CustomimportBeanDefinitionRegistrar implements importBeanDefinitionRegistrar{    @Override
    public void registerBeanDefinitions(Annotationmetadata annotationmetadata, BeanDefinitionRegistry beanDefinitionRegistry) {        boolean b1 = beanDefinitionRegistry.containsBeanDefinition("mother");        boolean b2 = beanDefinitionRegistry.containsBeanDefinition("father");        if(b1&&b2){            //获取bean的定义信息
            RootBeanDefinition beanDefinition = new RootBeanDefinition(Child.class);
            beanDefinitionRegistry.registerBeanDefinition("child",beanDefinition);
        }
    }
}
实现FactoryBean
public class UserFactoryBean implements FactoryBean{    //通过getObject()方法创建对象,如果是非单例,则在每次获取时执行该方法
    @Nullable
    @Override
    public User getObject() throws Exception {        return new User();
    }    //类型
    @Nullable
    @Override
    public Class getObjectType() {        return User.class;
    }    //是否单例
    @Override
    public boolean isSingleton() {        return true;
    }
}

该方式默认获取到的工厂Bean调用getObject创建的对象;
如果获取工厂Bean本身需要在ID前加&标识,例如&userFactoryBean 。

小结:

本节课主要学习了如何往Spring容器中注册Bean的4中方式,
1、通过@Bean
2、通过包扫描+@Component及其延伸组建
3、通过@import(importSelector、importBeanDefinitionRegistrar)
4、通过实现工厂Bean(FactoryBean)
下节课我们学习Bean的生命周期相关的内容。



作者:爱编程的帅小伙
链接:https://www.jianshu.com/p/c0640d02259e

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/235413.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号