欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring学习笔记01_什么是IoC和DI

程序员文章站 2022-03-15 19:19:20
...

控制反转

  • 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。
  • IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。
  • 其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫依赖查找(Dependency Lookup)。
  • 思想上的转变
    Spring学习笔记01_什么是IoC和DI

依赖注入

  • 通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

两中常见注入方式

1、构造函数注入

<!-- 使用构造函数的方式,给 service 中的属性传值
要求:
	类中需要提供一个对应参数列表的构造函数。
涉及的标签:
	constructor-arg
	 属性:
		index:指定参数在构造函数参数列表的索引位置
		type:指定参数在构造函数中的数据类型
		name:指定参数在构造函数中的名称 用这个找给谁赋值
		==========上面三个都是给谁赋值,下面两个指的是赋什么值的==============
		value:它能赋的值是基本数据类型和 String 类型
		ref:它能赋的值是其他 bean 类型,也就是说,必须得是在配置文件中配置过的 bean
--> 

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"> 
	<constructor-arg name="name" value="张三"></constructor-arg> 
	<constructor-arg name="age" value="18"></constructor-arg> 
	<constructor-arg name="birthday" ref="now"></constructor-arg>
</bean> 

<bean id="now" class="java.util.Date"></bean>

2、set 方法注入

<!-- 通过配置文件给 bean 中的属性传值:使用 set 方法的方式
涉及的标签:
	property
		属性:
			name:找的是类中 set 方法后面的部分
			ref:给属性赋值是其他 bean 类型的
			value:给属性赋值是基本数据类型和 string 类型的
			实际开发中,此种方式用的较多。
--> 

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"> 
	<property name="name" value="test"></property> 
	<property name="age" value="21"></property> 
	<property name="birthday" ref="now"></property>
</bean>

<bean id="now" class="java.util.Date"></bean>

注入集合属性 (用的也是set方法注入的方式)

  • 类中的相关属性:
public class AccountServiceImpl implements IAccountService {
	String[] myStrs;
	List<String> myList;
	Set<String> mySet;
	Map<String,String> myMap;
	Properties myProps;
	...
}
  • bean.xml
<!-- 注入集合数据
	List 结构的:
		array,list,set
	Map 结构的
		map,entry,props,prop
--> 
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
<!-- 在注入集合数据时,只要结构相同,标签可以互换 -->

<!-- 给数组注入数据 --> 
<property name="myStrs"> 
	<set>
		<value>AAA</value> 
		<value>BBB</value> 
		<value>CCC</value>
	</set>
</property>

<!-- 注入 list 集合数据 --> 
<property name="myList"> 
	<array> 
		<value>AAA</value> 
		<value>BBB</value> 
		<value>CCC</value>
	</array>
</property>

<!-- 注入 set 集合数据 --> 
<property name="mySet"> 
	<list><value>AAA</value> 
		<value>BBB</value> 
		<value>CCC</value>
	</list>
</property>

<!-- 注入 Map 数据 --> 
<property name="myMap"> 
	<props> 
		<prop key="testA">aaa</prop> 
		<prop key="testB">bbb</prop>
	</props>
</property>

<!-- 注入 properties 数据 -->
<property name="myProps"> 
	<map>
		<entry key="testA" value="aaa"></entry> 
		<entry key="testB"> 
			<value>bbb</value>
		</entry>
	</map>
</property>
</bean>
相关标签: Java