spring学习笔记 -- day03 IOC中的bean标签、DI依赖注入

一、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>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值