3、Spring的get方法、配置非自定义的bean、Bean实例化的基本流程

Spring的get方法

 Spring配置非自定义的bean

配置第三方功能类中的bean,要考虑两个问题:

1、被配置的Bean的实例化方式是什么?无参构造,有参构造,静态工厂方式还是实例工厂方式

2、被配置的Bean是否需要注入必要属性

例1:配置Druid数据源交由Spring管理 

 阅读Druid源码发现,Druid提供了无参构造器,我们可以使用无参构造的方式配置Bean,注入四个必须的简单类型信息,注意property的name属性必须与Druid的源码中的setter方法名对应。

 例2:配置Connection交由Spring管理

 Class和DriverManager都是工厂,forName和getConnection分别是这两个工厂的静态方法

class属性指定工厂的全限路径名,factory-method指定静态方法名,id为beanId,constructor-arg子标签为执行静态方法注入必须的参数。 

 例3:配置日期对象交由Spring管理

首先,配置SimpleDateFormat工厂为bean,然后配置Date实例对象由工厂的parse方法得到。

 例4:配置MyBatis的SqlSessionFactory交由Spring管理

 首先,InputStream的实例不由new InputStream得到,所以它是静态工厂方法得到;第二,SqlSessionFactoryBuilder通过自己的无参构造器得到,所以它是无参构造实例化;第三,SqlSessionFactory的实例通过实例化的SqlSessionFactoryBuilder的build方法得到,所以它是实例工厂方法得到。 

 Bean实例化的基本流程

Spring容器在进行初始化时,会将xml配置的<bean>的信息封装成一个BeanDefinition对象,所有的BeanDefinition存储到一个名为beanDefinitionMap的Map集合(由BeanFactory维护)中去,Spring框架在对该Map进行遍历,使用反射创建Bean实例对象,创建好的Bean对象存储在一个名为singletonObjects的Map集合中,当调用getBean方法时则最终从该Map集合中取出Bean实例对象返回。

tips:BeanDefinition对象不维护真正的实例,而是在维护<bean>这个标签本身的信息,beanDefinitionMap也就是一个维护<bean>标签信息的Map集合,真正反射创建实例对象还得看Spring去便利beanDefinitionMap。

 

 

总结 :

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值