一、IOC和DI的概念:
IOC:字面意思是控制反转,控制权的转移,获得依赖对象的过程被反转了,即获得对象的过程由自身管理变成了由IOC容器自动注入,应用程序本身不负责依赖对象的创建和维护,而是由外部容器(Spring)负责创建和维护。
DI:依赖注入,是IOC的一种实现方式,目的是创建对象并且组装对象之间的关系。就是在IOC容器运行期间,动态的将某种依赖关系注入到对象当中。即当一个class A,里面有个一 Class B的对象属性,当实例化的时候,先实例化A的对象,再实例化一个B的对象,再把B的对象赋值给A。
如图,我们的业务对象,进入Spring容器中,通过配置的源数据,来生成出符合我们需要的对象,我们在需要使用对象的时候直接拿出来用即可,应用程序本身不负责依赖对象的创建和维护。
获取对象的过程:找IOC容器-->容器返回对象-->使用对象。
在IOC容器中,把所有的对象都称之为Bean,Spring的Bean配置如下:首先创建一个Spring.xml文件(还有一种方式是使用注解模式,这是使用xml文件配置方式)
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
</bean>
id表示对于这个Bean的唯一标识,class表示这个Bean对应于哪一个具体的类。
二、Spring的注入:
Spring注入是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为,有两种方式:设值注入和构造注入。
设值注入:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="testA" ref="testA"/> </bean> <bean id="testA" class="com.dss.test.TestA"></bean>
即 DataSourceTransactionManager类中有一个成员对象变量 com.dss.test.TestA ,名字为testA,此时给testA提供set方法,即可在创建 transactionManager对象的时候也testA也创建对象。
构造注入:同理,在DataSourceTransactionManager类中提供一个构造方法,为testA成员变量赋值。
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <constructor-arg name="testA" ref="testA"/> </bean> <bean id="testA" class="com.dss.test.TestA"></bean>
注意的是 testA必须要和DataSourceTransactionManager中定义的成员变量名保持一致。
浙公网安备 33010602011771号