一、bean标签
1、bean的实例化
spring在为我们实例化bean对象时,默认情况下,调用的是无参构造函数。
如果类中没有无参构造函数,则对象创建失败!
2、对象的作用范围
使用scope属性配置对象的作用范围
<bean id="customerService" class="cn.itcast.service.impl.CustomerServiceImpl" scope="prototype"></bean>
取值:
singleton 单例(默认值)。作用范围是整个应用
prototype 多例.作用范围是一次使用。当整合了struts2框架之后,action的配置需要使用此值。
request 作用范围是一次请求
session 作用范围是一次会话
globalsession 作用范围是全局会话
3、对象的生命周期
可以通过配置的方式指定初始化和销毁方法
init-method:用于指定初始化方法
destroy-method:用于指定销毁方法
<bean id="customerService" class="cn.itcast.service.impl.CustomerServiceImpl" scope="prototype"
init-method="init" destroy-method="destroy"></bean>
单例:
出生:Spring的容器创建,对象出生
活着:只要容器活着,对象就一直存在
死亡:容器销毁,对象消亡
多例:
出生:对象在使用的时候出生
活着:对象在使用过程中,一直活着
死亡:当对象长时间不用时,由java的垃圾回收机制回收。
二、依赖注入
1、什么是依赖注入
它是spring框架核心ioc的具体实现方式。简单的说,就是坐等框架把对象传入,而不用我们自己去获取。
2、构造函数的注入方式
要求:
类中需要提供一个对应参数列表的构造函数。
涉及的标签:
<constructor-arg>
标签属性:
type:指定的是构造函数中参数的数据类型。
index:指定的是构造函数中参数的索引位置。(从0开始)
name:指定的是构造函数中参数的名称。
========上面三个属性是找给谁赋值的===下面两个属性是指赋什么值的===============================
value:赋值的数据类型只能是基本类型和String类型
ref:赋值的数据类型是其他bean类型
<bean id="customerService" class="cn.itcast.service.impl.CustomerServiceImpl">
<constructor-arg name="name" value="test"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="birthday" ref="now"></constructor-arg>
</bean>
3、使用set方式注入
要求:
在类中提供要注入的对象的set方法
涉及的标签:
<property>
标签属性:
name:指定的是set方法后面的部分
value:赋值类型是String和基本类型
ref:赋值类型是其他bean类型
<bean id="customerService2" class="cn.itcast.service.impl.CustomerServiceImpl2">
<property name="name" value="泰斯特"></property>
<property name="age" value="23"></property>
<property name="birthday" ref="now"></property>
</bean>
4、注入复杂类型的数据
(1)、java类中
package cn.itcast.service.impl;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import cn.itcast.service.ICustomerService;
/**
* 客户的业务层实现类
*
* @author zhy
*
*/
public class CustomerServiceImpl3 implements ICustomerService {
private String[] myStrs;
private List<String> myList;
private Set<String> mySet;
private Map<String, String> myMap;
private Properties myProps;
public void setMyStrs(String[] myStrs) {
this.myStrs = myStrs;
}
public void setMyList(List<String> myList) {
this.myList = myList;
}
public void setMySet(Set<String> mySet) {
this.mySet = mySet;
}
public void setMyMap(Map<String, String> myMap) {
this.myMap = myMap;
}
public void setMyProps(Properties myProps) {
this.myProps = myProps;
}
@Override
public void saveCustomer() {
System.out.println(Arrays.toString(myStrs));
System.out.println(myList);
System.out.println(mySet);
System.out.println(myMap);
System.out.println(myProps);
}
}
(2)、bean标签中
<!-- 注入集合数据
结构相同,标签可以互换
-->
<bean id="customerService3" class="cn.itcast.service.impl.CustomerServiceImpl3">
<!-- 注入数组 -->
<property name="myStrs">
<list>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</list>
</property>
<!-- 注入list -->
<property name="myList">
<set>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</set>
</property>
<!-- 注入set -->
<property name="mySet">
<array>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</array>
</property>
<!-- 注入map -->
<property name="myMap">
<props>
<prop key="testC">CCC</prop>
<prop key="testD">DDD</prop>
</props>
</property>
<!-- 注入properties -->
<property name="myProps">
<map>
<entry key="testA" value="AAA"></entry>
<entry key="testB">
<value>BBB</value>
</entry>
</map>
</property>
</bean>