spring的bean创建(一)

spring中最重要的就是IOC(控制反转),bean的创建再也不用手动new,而是交由spring来进行管理。

spring会创建一个容器来储存bean对象,容器中其实是一个又一个的map,用来存储和管理bean。键是bean的名字,值是bean对象。

通常有两种注册bean的方式,xml文件方式和注释方式。

<bean id="myMap" class="java.util.HashMap">
    <constructor-arg>
        <map>
            <entry key="key1" value="value1"/>
            <entry key="key2" value="value2"/>
            <entry key="key3" value="value3"/>
        </map>
    </constructor-arg>
</bean>

或者

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class AppConfig {

    @Bean
    public Map<String, String> myMap() {
        Map<String, String> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
        return map;
    }
}

spring把不同文件定义的bean转换成相同的BeanDefinition,所以设计了一个BeanDefinitionReader接口,只要实现loadBeanDefinitions方法就可以把定义的bean转化成BeanDefinition。

而注解是使用AnnotatedBeanDefinitionReader(不过并没有实现BeanDefinitionReader)使用

private <T> void doRegisterBean(Class<T> beanClass, @Nullable String name,
			@Nullable Class<? extends Annotation>[] qualifiers, @Nullable Supplier<T> supplier,
			@Nullable BeanDefinitionCustomizer[] customizers)

来进行解析的,最后也解析成BeanDefinition。

而解析出来的BeanDefinition并不完整,如果他的value使用${}取读取配置文件的信息。spring提供了一个BeanFactoryPostProcessor用于处理BeanDefinition。BeanFactory就像是IOC容器的门户,需要通过他来访问容器。最重要的实现类是ApplicationContext ,可以通过ApplicationContext 直接操作容器,比如通过getBean方法直接使用name获取指定的Bean。

有了完整的BeanDefinition就可以开始实例化了

  • 36
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值