Spring Bean 相关概念
IoC
使用对象的时候,直接new一个对象,使得当前模块与new的对象耦合了,这与面向接口面向抽象编程相冲突,也带来了系统模块架构问题。
比如,调用dao层的时候,在使用的时候,会new一个特定数据库的dap层,这与特定数据库绑定了;如果采用抽象工厂来获取dao的实现类,在工厂类中需要把所有数据库的dao写出,在数据库迁移的时候,需要修改这个工厂类。
采用IoC之后,通过容器自动为业务层设置dao的实现类,可以在不修改代码的情况下,实现数据库换库迁移。实现了松耦合。
在spring的bean定义文件中,可以定义bean设置属性,bean之间的继承,bean的抽象和不同的获取方式。
Bean容器初始化
1.beans包
BeanFactory类以及子类 加载并初始化bean
使用工厂模式来获取bean,有静态工厂模式和实例工厂模式,在配置中有所区别。
静态工厂
调用TestFactory的getBean()方法来获取bean,而且TestFactory是没有实例化的,所以获取的时候,通过静态方法
<bean id="bean_string" class="com.qtone.test.TestFactory" factory-method="getBean"/>
对应的实际代码
public static Object getBean() { ...//Remainder omitted }
实例工厂
先实例化一个DalDataSourceFactory,再根据这个实例来调用createDataSource方法进行初始化
<bean id="dalDatasourceFactory" class="com.datasource.configure.DalDataSourceFactory"/> <bean id="datasourcesDB" factory-bean="dalDatasourceFactory" factory-method="createDataSource"> <constructor-arg name="allInOneKey" value="***" /> <constructor-arg name="svcUrl" value="*****" /> </bean>
对应的实际代码