spring框架Ioc/Di

什么是ioc 和Di

1Ioc

1.1 Ioc :ioc是控制反转(Inversion of control)所完成的事情就是原先由程序员主动通过new 去进行实例化对象的事情,交给了spring 去负责。
控制:控制的是类的对象
反转:交给spring负责
1.2 ioc的作用:主要就是进行解耦,那么解什么耦呢,就是程序员不需要去进行管理对象了,解除了对象管理和程序员之间的耦合。

2 DI

2.1 Di :是依赖注入
Di和Ioc 实质上是一样的,当一个类A中需要另外的一个类B的时候,我们把B赋值给类A的过程就叫依赖注入。

3 spring 框架创建对象的三种方式

1 通过构造方法进行创建
无参构造创建:
在类中提供构造方法

public class People {
	private int id;
	private String name;
	public People() {
		System.out.println("默认无参创建对象");
	}
}
 在applicationContext.xml 文件中 配置信息
<bean id="peo" class="com.wang.model.People"></bean>

	 id :表示从class这个类中取到对象的唯一标识
	 class:表示从那个类中创建对象
	 name:给取到的对象起别名

测试

//首先加载applicationContext.xml文件到applicationContext 容器中
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过调方法来进行创建people 对象;peo指的就是id即就是xml 文件里的id 对象的唯一标识;people.class 指的是返回值类型
People bean = ac.getBean("peo", People.class);
System.out.println(bean);

有参构造:

在类中提供有参的构造方法

public class People {
	private int id;
	private String name;
	public People() {
		System.out.println("默认无参创建对象");
	}
	public People(int id, String name) {
		System.out.println("有参构造");
		this.id = id;
		this.name = name;
	}
	public People(String name, int id) {
		System.out.println("有参构造2222");
		this.id = id;
		this.name = name;
	}
}

xml文件的配置

<bean id="peo" class="com.wang.model.People">
	<constructor-arg index="0" type="int" name="id" value="1234"/>
	<constructor-arg index="1" type="java.lang.String" name="name" value="王"/>
</bean>     

index:指的是people实体类中的第一个成员变量的索引
type:成员变量的类型
name:成员变量的变量名
value:赋给变量的值

测试在控制台输出

有参构造
People [id=1234, name=王端]

注意:有参构造的时候,如果我们有相同的有参构造方法,只是传入参数的前后的顺序不同,而且我们在xml文件中没有使用index 或者 type 来进行明确的标记的话,那么创建对象的时候走构造方法时,默认是从下往上进行找的。

2 实例公厂创建

首先必须要有一个公厂,来进行生产对象:

public class PeopleFactory {
	public People inStance() {
		return new People(1,"杜兰特");
	}
}

我们需要先去创建公厂对象然后再去进行创建实体类的对象
我们之前都是这么进行写的

PeopleFactory factory = new PeopleFactory();
People people = factory.instance();

现在我们需要在xml文件中进行配置

// id:工厂对象的唯一表示 class:从工厂类中
<bean id="factory" class="com.wang.model.PeopleFactory"/>
//id:对象的唯一标识 factory-bean:从那个工厂中 factory-method :工厂的哪一个方法
<bean id="peo1" factory-bean="factory" factory-method="inStance"/>

3 静态公厂

静态工厂即就是我们把工厂里的方法进行static

public static People newInStance() {
		return new People(2,"杜兰特");
	}

然后进行配置

//即就是从那个类中的那个方法进行创建对象 对象的唯一标识是 id
<bean id="peo2" class="com.wang.model.PeopleFactory" factory-method="newInStance"/>

4 给bean 的属性进行赋值(注入)

1 使用构造进行注入
2 使用类中的set 方法进行注入
如果是简单的基本数据类型或者是String时

<property name="id">
		<value>223</value>
	</property>
	<property name="name">
		<value>你大爷</value>
	</property>

如果是set<?>时

<property name="sets">
		<set>
			<value>1</value>
			<value>2</value>
			<value>3</value>
		</set>
	</property>

如果时list时

property name="list">
		<list>
			<value>1</value>
			<value>2</value>
		</list>
	</property>

如果 list 中就只有一个值

<property name="list" value="1"> 
</property>

如果是map时

<property name="map">
		<map>
			<entry key="1">
				<value>2</value>
			</entry>
			<entry key="2">
				<value>3</value>
			</entry>
		</map>

如果是数组时

<property name="str">
		<array>
			<value>1</value>
			<value>3</value>
			<value>4</value>
		</array>
	</property>

如果数组也只有一个值的时候也可以通过value 来直接进行赋值
如果属性 Properties 类型

<property name="demo"> 
	<props> 
		<prop key="key">value</prop> 
		<prop key="key1">value1</prop> 
	</props> 
</property>

对象的依赖注入

//ref:返回值desk 引用的时另外的一个bean 即就是另外的一个对象进行注入
<bean id="peo1" class="com.wang.model.People">
	<property name="desk" ref="desk"/>
</bean>
<bean id="desk" class="com.wang.model.Desk">
	<property name="id" value="1"/>
	<property name="price" value="12"/>
</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值