Spring_04 spring中的依赖注入

1、依赖注入

spring中的依赖注入(Dependency Injection)
	1、IOC的作用:降低程序间的耦合(依赖关系)
	
	2、依赖关系的管理:以后都交给spring来维护。
	
	3、在当前类需要用到其他类的对象,由spring为我们提供,我们只需要在配置文件中说明
	
	4、依赖关系的维护:就称之为依赖注入。
	5、依赖注入:
	(1)能注入的数据:有三类
		基本类型和String
		其他的bean类型(在配置文件中或者注解配置过的bean)
		复杂类型/集合类型
	(2)注入的方式有三种
		第一种:使用构造函数提供
		第二种:使用set方法提供
		第三种:使用注解提供(明天的内容)

2、构造函数注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
   <!-- 构造函数注入:
 		使用的标签:constructor-arg
 		标签出现的位置:bean标签的内部
 		标签中的属性
			type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个或某些参数的类型
			index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值。索引的位置是从0开始。
			name:用于指定给构造函数中指定名称的参数赋值。(常用的)
			=========以上三个参数指定给构造函数中哪个参数赋值========================
			value:用于给基本类型和string类型的数据
			ref:用于指定其他的bean类型数据。它指的就是在spring的ioc核心容器中出现过得bean对象。
			
		优势:
			在获取bean对象时,注入的数据类型是必须的操作,否则对象无法创建成功。
		弊端:
			改变了bean对象实例化方式,使我们在创建对象时,如果用不到这些数据,也必须提供。
    -->
         
        <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
        	<!-- <constructor-arg type="java.lang.String" value="test"></constructor-arg> -->
        	<constructor-arg name="name" value="test"></constructor-arg>
        	<constructor-arg name="age" value="85"></constructor-arg>
        	<constructor-arg name="birthday" ref="now"></constructor-arg>
        	
        </bean>
        <!-- 配置一个日期对象 -->
        <bean id="now" class="java.util.Date"></bean>
</beans>
public class AccountServiceImpl implements IAccountService{
	//如果是经常变化的数据,并不适用于注入方式
	private String name;
	private Integer age;
	private Date birthday;
	
	public AccountServiceImpl(String name,Integer age,Date birthday) {
		this.age=age;
		this.name=name;
		this.birthday=birthday;
	}
	public void saveAccount() {
		System.out.println("servlce中的saveAccount方法执行了"
				+ "~~~\n"+birthday+","+name+","+age);
	}
}

2、set方法注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
 <!-- set方法注入(更常用)
	   	涉及的标签:property
	   	出现的位置:bean标签的内部
	   	标签的属性
	   		name:用于指定注入是所调用的set方法的名称。
	 		value:用于给基本类型和string类型的数据
	 		ref:用于指定其他的bean类型数据。
	 			它指的就是在spring的ioc核心容器中出现过得bean对象。
	 	优势:
	 		创建对象时没有明确的限制,可以直接使用构造函数.。
	 	弊端:
	 		如果有某个成员必须有值,则获取对象是有可能set方法没有执行。
    -->
	 <bean id="accountService2" class="com.itheima.service.impl.AccountServiceImpl2">
	  	<property name="name" value="TEST"></property>
	  	<property name="age" value="81"></property>
	  	<property name="birthday" ref="now"></property>
	 </bean>
 </beans>
/**
 * 	2、set方法注入
 */
public class AccountServiceImpl2 implements IAccountService{
	//如果是经常变化的数据,并不适用于注入方式
	private String name;
	private Integer age;
	private Date birthday;
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public void saveAccount() {
		System.out.println("servlce中的saveAccount方法执行了"
				+ "~~~\n"+birthday+","+name+","+age);
	}
	
}

3、复杂/集合类型的注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 复杂/集合类型的注入
    		用于给list结构集合注入的标签:list array set
    		用于给Map结构结合注入的标签:map props
    		结构相同,标签可以互换
    		
    	 -->    
 <bean id="accountService3" class="com.itheima.service.impl.AccountServiceImpl3">
   	<property name="myStrs">
   		<array>
   			<value>aaa</value>
   			<value>bbb</value>
   			<value>ccc</value>
   		</array>
   	</property>
   	<property name="myList">
   		<list>
   			<value>aaa</value>
   			<value>bbb</value>
   			<value>ccc</value>
   		</list>
   	</property>
   	<property name="mySet">
   		<set>
   			<value>aaa</value>
   			<value>bbb</value>
   			<value>ccc</value>
   		</set>
   	</property>
   	<property name="myMap">
   		<map>
   			<entry key="1" value="a"></entry>
   			<entry key="2"><value>bbb</value></entry>
   			<entry key="3" value="c"></entry>
   		</map>
   	</property>
   	<property name="myProps">
   		<props>
   			<prop key="testc">ccc</prop>
   			<prop key="testd">ddd</prop>
   		</props>
   	</property>
   </bean>
</beans>
public class AccountServiceImpl3 implements IAccountService{
	private String[] myStrs;
	private List<String> myList;
	private Set<String> mySet;
	private Map<String,String> myMap;
	private Properties myProps;
	
	public void saveAccount() {
		System.out.println(Arrays.toString(myStrs));
		System.out.println(myList);
		System.out.println(mySet);
		System.out.println(myMap);
		System.out.println(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;
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值