Spring学习之Bean的创建

Spring跨年最重要的就是IOC和AOP,IOC的意思就是控制反转,不用用户自己去new对象,而是去交给容器处理,也就是context,他实际就是一个HashMap,他是存储的是实例的名称和实例

大致为HashMap<String,Object> 对象创建默认是单例模式,在容器加载的时候创建,将这个对象放入Spring容器中,他的穿件方式是根据类名进行反射创建,根据条件有动态反射和Cglib反射

那么现在来学习一下怎么给容器注册组件

给容器注册组件的方式

1.@Bean 注解

使用方式:

	@Bean("person")
    public Person getPerson(){
        return new Person(1,"zhangsan",20);
    }

将Person组件命名为person,通过此方法将该实例添加入Spring容器

2.包扫描+组件的标注注解(@ComponentScan: @Controller,@Service,@Repponsitory,@Compont)

3.使用@Import:和@Bean类似

​ a.@Import(要导入到容器中的组件):容器会自动注册这个组件,bean的id\为全类名

@Configurable
@Import(value = {Dog.class})
public class Config1 {}

加@Import注解后会将Dog这个组件加入到容器中

​ b.ImportSelector:是一个接口,返回需要导入到容器的组件全类名

	public class MyImportSelector implements ImportSelector {

    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return new String[]{"com.zh.case1.bean.Dog"};
    }
}
@Configurable
@Import(value = {ZhImportSelector.class})
public class Config1{}

实现此接口也会将Dog组件加入到容器

​ c.ImportBeanDefinitonRegistrar:

public class ZhImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    /**
     * AnnotationMetadata:当前类的注解信息
     * BeanDefinitionRegistry:BeanDefinition注册类
     * @param importingClassMetadata
     * @param registry
     */
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        registry.registerBeanDefinition("dog",new RootBeanDefinition(Dog.class));
    }
}
@Configurable
@Import(value = {ZhImportBeanDefinitionRegistrar.class})
public class Config1{}

4.使用FactoryBean<>接口

public class MyFactoryBean implements FactoryBean<Pig> {
    @Override
    public Pig getObject() throws Exception {
        return new Pig();
    }

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

    //设置是否为单例bean
    @Override
    public boolean isSingleton() {
        return true;
    }
}

他只有调用getObject方法才会加载这个组件,而不是再初始化的时候自动加载进去

以上就是往Spring容器中添加组件的四种方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值