一.ioc
之前程序是主动创建对象,控制权在程序员手上
ioc容器:通过容器来管理对象的创建,“控制反转”就是对组件对象控制权的转移,从程序代码本身转移到了外部容器
ioc作用:程序员不用再去管理对象的创建了,系统的耦合性大大降低,可以更加专注在业务的实现上
二、依赖注入(Dependency injection)
依赖:值Bean对象的创建依赖于容器,Bean对象的依赖资源
注入:指Bean对象所依赖的资源,由容器来设置和装配
1.构造器注入:
第一种,下标赋值
<bean id="user" class="com.zh.pojo.User">
<constructor-arg index="0" value="spring"/>
</bean>
第二种方式通过类型使用,不建议使用
<bean id="user" class="com.zh.pojo.User">
<constructor-arg type="java.lang.String" value="zh1"/>
</bean>
第三种 直接通过参数名来设置
<bean id="user" class="com.zh.pojo.User">
<constructor-arg name="name" value="zh2"/>
</bean>
2.Set注入
要求被注入的属性必须要有set方法
<!--第一种 常量注入注入 value-->
<property name="name" value="zh"/>
<!--第二种 bean注入,ref-->
<property name="address" ref="address"/>
<!--第三种数组注入-->
<property name="books">
<array>
<value>西游记</value>
<value>水浒传</value>
<value>三国演义</value>
<value>红楼梦</value>
</array>
</property>
<!--第四种list注入-->
<property name="hobbies">
<list>
<value>骑行</value>
<value>唱歌</value>
<value>跳舞</value>
</list>
</property>
<!--第五种Map注入-->
<property name="card">
<map>
<entry key="中国银行" value="原油"/>
<entry key="中国邮政" value="快递"/>
<entry key="中国移动" value="通信"/>
</map>
</property>
<!--第六种 set注入-->
<property name="games">
<set>
<value>LOL</value>
<value>DNF</value>
<value>CF</value>
</set>
</property>
<!--第七种 null注入-->
<property name="wife">
<null/>
</property>
<!--第八种 properties注入-->
<property name="info">
<props>
<prop key="学号">201908080145</prop>
<prop key="name">zh</prop>
<prop key="age">29</prop>
</props>
</property>
</bean>
3.p命名空间注入
<!--p命名空间约束-->
xmlns:p="http://www.springframework.org/schema/p"
<!--p命名空间注入,可以直接注入属性的值:property-->
<bean id="user" class="com.zh.pojo.User" p:age="18" p:name="zh" scope="singleton"/>
4.c命名空间注入
<!--c命名空间约束-->
xmlns:c="http://www.springframework.org/schema/c"
<!--c命名空间注入,通过构造器注入:construct-orgs-->
<bean id="user2" class="com.zh.pojo.User" c:age="19" c:name="zfl" scope="prototype"/>