
在创建Bean之前,首先需要创建IOC容器,Spring提供了IOC容器的两种实现方式:

bean对象是由Spring IOC容器管理的
bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。
这些 bean 是由用容器提供的配置元数据创建的,例如,在 XML 的表单中的 定义。
bean的常见属性
| 属性 | 描述 |
|---|---|
| class | 这个属性是强制性的,并且指定用来创建 bean 的 bean 类。 |
| name | 这个属性指定唯一的 bean 标识符。在基于 XML 的配置元数据中,你可以使用 ID 和/或 name 属性来指定 bean 标识符。 |
| scope | 这个属性指定由特定的 bean 定义创建的对象的作用域 |
| constructor-arg | 它是用来注入依赖关系的 |
| properties | 它是用来注入依赖关系的 |
| autowiring mode | 它是用来注入依赖关系的 |
| lazy-initialization mode | 延迟初始化的 bean 告诉 IoC 容器在它第一次被请求时,而不是在启动时去创建一个 bean 实例。 |
| initialization 方法 | 在 bean 的所有必需的属性被容器设置之后,调用回调方法。 |
| destruction 方法 | 当包含该 bean 的容器被销毁时,使用回调方法。它将会在 bean 的生命周期章节中进行讨论。 |




如果一个类中,有一个属性不是基本类型,包装类,String类,而是自定义的类型,那么我们就不可以使用value标签或value属性来为它赋值,而要使用ref来进行引用


级联属性更改数值会影响外部声明bean(ref赋值的是引用)


<!-- 测试内部bean-->
<bean id="emp2" class="com.zyh.pojo.Employee">
<property name="id" value="102"></property>
<property name="lastName" value="xx"></property>
<property name="email" value="xx@163.com"></property>
<property name="salary" value="60"></property>
<property name="dept">
<bean id="dept" class="com.zyh.pojo.Dept">
<property name="deptId" value="2"></property>
<property name="deptName" value="人事部"></property>
</bean>
</property>
</bean>
<!-- 测试list注入-->
<bean id="dept2" class="com.zyh.pojo.Dept">
<property name="deptName" value="策划部"></property>
<property name="empList">
<list>
<ref bean="emp1"></ref>
<ref bean="emp2"></ref>
</list>
</property>
</bean>

<!--测试map-->
<bean id="dept5" class="com.zyh.pojo.Dept">
<property name="deptId" value="5"></property>
<property name="deptName" value="采购部"></property>
<property name="empMap">
<map>
<entry>
<key>
<value>101</value>
</key>
<ref bean="emp2"></ref>
</entry>
<entry>
<key>
<value>103</value>
</key>
<ref bean="emp1"></ref>
</entry>
</map>
</property>
</bean>
