1.IOC创建对象
- 通过 < bean id=“” class=“”>标签来创建对象
id为IOC创建对象所产生的对象名,class为类的全路径,默认调用无参构造函数,为每个属性赋予默认初始值
<bean id="stu" class="com.system.entity.Student"></bean>
<!-- 调用默认构造方法,属性值只能复制默认值 -->
- 通过调用setXXX方法注入属性值
使用< property >标签给属性注入初始值,name为属性名,value为对应属性值,若要给一个对象注入属性值,则需要用ref属性,将其他bean的id赋值给他
<bean id="stu" class="com.system.entity.Student">
<property name="id" value="1001"></property>
<property name="name" value="张安"></property>
<property name="age" value="25"></property>
<property name="dept" ref="dept"></property>
</bean>
- 通过调用有参构造函数注入属性值
<!-- 构造方法注入属性值 -->
<!-- 方法一,用index属性顺序赋值,注意赋值顺序不能乱,0 1 2 3 .... -->
<bean id="stu2" class="com.system.entity.Student">
<constructor-arg index="0" value="1002"></constructor-arg>
<constructor-arg index="1" value="李四"></constructor-arg>
<constructor-arg index="2" value="23"></constructor-arg>
</bean>
<!-- 方法二,用name属性赋值,name为类的属性名,赋值顺序可以乱 -->
<bean id="stu3" class="com.system.entity.Student">
<constructor-arg name="name" value="王五"></constructorarg>
<constructor-arg name="id" value="1003"></constructor-arg>
<constructor-arg name="age" value="22"></constructor-arg>
</bean>
- 对象集合注入属性值
List<>类型采用:< list > 标签
int[] 数组类型采用:< array > 标签
采用< ref >标签来给每个对象注入属性值,将其他Bean的id赋给bean属性
<bean id="dept" class="com.system.entity.Dept">
<!-- 一对多 -->
<property name="empList">
<list>
<ref bean="pq"></ref>
<ref bean="gtq"></ref>
</list>
</property>
</bean>
- 使用p前缀来代替property,简化配置
对象属性采用 p:XXX-ref=“bean的id”来赋值(多对一)
<bean id="dept" class="com.system.entity.Dept" p:deptno="10"
p:dname="技术支持部" p:loc="上海">
</bean>
<bean id="emp" class="com.system.entity.Emp" p:empno="8899"
p:ename="佩奇" p:job="主管" p:sal="10000.00" p:comm="800.00" p:dept-ref="dept">
</bean>
- 自动装配(对象注入)
在bean标签中,采用autowire属性自动为对象注入属性值(注意两个类之间不能互相自动装配,即emp对象自动装配dept对象,那么dept对象就不能自动装配emp对象)
byName:通过 属性的名字 完成自动装配
<bean id="dept" class="com.system.entity.Dept">
<property name="deptno" value="10"></property>
<property name="dname" value="技术支持部"></property>
<property name="loc" value="上海"></property>
</bean>
<bean id="emp" class="com.system.entity.Emp" autowire="byName">
<property name="empno" value="8899"></property>
<property name="ename" value="佩奇"></property>
<property name="job" value="主管"></property>
<property name="sal" value="10000.00"></property>
<property name="comm" value="800.00"></property>
<!-- <property name="dept" ref="dept"></property>-->
</bean>
byType:通过属性的 数据类型 完成自动装配,属性名和bean的id可以不相等
<bean id="dept22" class="com.system.entity.Dept">
<property name="deptno" value="10"></property>
<property name="dname" value="技术支持部"></property>
<property name="loc" value="上海"></property>
</bean>
<bean id="emp" class="com.system.entity.Emp" autowire="byType">
<property name="empno" value="8899"></property>
<property name="ename" value="佩奇"></property>
<property name="job" value="主管"></property>
<property name="sal" value="10000.00"></property>
<property name="comm" value="800.00"></property>
<!-- <property name="dept" ref="dept"></property>-->
</bean>
2.Bean的作用域
通过设置< bean >标签里的scope属性可以设置该Bean的作用域
- singleton:单例(单个实例、单个对象),程序在使用Ioc容器获得bean对象是同一个对象。 该属性为默认属性
- prototype:原型,程序在使用Ioc容器获得Bean对象是不同的,每次getBean()方法调用一次,创建一个新的Bean对象。
<bean id="stu" class="com.system.entity.Student" scope="prototype">
<property name="id" value="1001"></property>
<property name="name" value="张安"></property>
<property name="age" value="25"></property>
</bean>
3.Bean的继承
- Bean的继承区别于Java类的继承,其继承是一种对象属性值的继承!!
- 通过parent属性来指定继承的beang,parent=“bean的id”
- 继承的属性值,可以在子bean中对该属性值进行覆盖
<bean id="stu" class="com.system.entity.Student" >
<property name="id" value="1001"></property>
<property name="name" value="张安"></property>
<property name="age" value="25"></property>
</bean>
<bean id="stu2" class="com.system.entity.Student" parent="stu">
<!-- 针对继承过来的属性值,可以在子bean中进行覆盖 -->
<property name="name" value="李四"></property>
</bean>
4.读取外部资源(导入资源文件)
- 在Spring.xml配置文件中添加该属性
<!-- 导入外部资源文件
classpath前缀限定匹配范围:只匹配我的classes这一级目录的文件(不包含子目录)
classpath*前缀:匹配范围还包括其他jar包的classes目录
-->
<context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
- 通过Spring.xml配置文件中使用 ${键} 的方式引用资源文件里的值
<!-- 创建Bean,数据源对象,读取db.properties -->
<bean id="dataSource" class="com.system.entity.DataSource">
<property name="driver" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>