Spring-02 IOC与DI

核心容器

两种容器

Spring提供IOC容器实现的两种方式:(两个接口)

(1)BeanFactory:

IOC容器中最基本实现方式,时Spring内部使用的接口,不提供开发人员进行使用

**特点:**加载配置文件的时候不会去创建对象,在获取对象(使用)才会去创建对象

(2)ApplicationContext:

BeanFactory接口的子接口,提供更多更强大的功能,一般有开发人员进行使用

**特点:**加载配置文件时候就会把在配置文件的对象进行创建

在这里插入图片描述

// 多个配置文件的加载
String [] contexts = {
   "applicationContext-1.xml","applicationContext-2.xml"};
ClassPathXmlApplicationContext app = 
new ClassPathXmlApplicationContext(contexts);

或者 
ClassPathXmlApplicationContext app = 
new ClassPathXmlApplicationContext("applicationContext-1.xml","applicationContext-2.xml");

Bean标签的id 和name属性

id和name都是spring 容器中中bean 的唯一标识符。

  1. id: 一个bean的唯一标识 , 命名格式必须符合XML ID属性的命名规范
  2. name: 可以用特殊字符,并且一个bean可以用多个名称:name=“bean1,bean2,bean3”,用逗号或者分号或者空格隔开。如果没有id,则name的第一个名称默认是id
  3. 如果 一个 bean 标签未指定 id、name 属性,则 spring容器会给其一个默认的id,值为其类全名。
  4. 如果有多个bean标签未指定 id、name 属性,则spring容器会按照其出现的次序,分别给其指定 id 值为 “类全名#1”, “类全名#2”

从容器中获取对象的方式

app.getBean(类名.class)
app.getBean("bean的name或者id属性值");

IOC / DI

IOC 控制反转

IOC Inversion of Control 控制反转
DI  Dependency Injection 依赖注入

控制反转- IOC定义:

将原来程序中自己创建实现类对象的控制权反转到iOC容器中,程序只需要从iOC容器获取创建好的对象;
iOC容器相当于一个工厂;

是一种面向对象编程的一种设计理念 
可以降低程序代码之间的耦合度 
程序中不在需要创建对象, 把创建对象的权利移交给了 Spring 
把对象创建 控制权 反转给了 Spring 

DI 依赖注入

DI:所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中

	相对于 控制反转, 依赖注入的说法, 更加容易理解
	由容器 (Spring 容器) 负责 把组件所依赖的具体对象, 注入给组件,从而避免组件之间以硬编码的方式耦合在一起.
	既然把对象的创建权利交个了 Spring, 对象之间的依赖关系, 也需要 Spring来维护.
	对象的依赖, 由Spring 注入(传递)

iOC和 DI 、DL的关系

iOC和 DI 描述的是同一件事 ;

iOC强调 将对象的创建权,被反转到IoC 容器;

DI 强调 iOC容器将对象的依赖关系,动态注入到对象之中 ,DI是控制反转具体的实现过程。

在这里插入图片描述
在这里插入图片描述

依赖注入方式

依赖注入方式

set 方法赋值

<bean id="personId" class="cn.bdqn.Person.Person">
	<property name="name" value="张三"/>
	<property name="age" value="20"/>
</bean>

命名空间传参

引入命名空间

xmlns:p="http://www.springframework.org/schema/p"
<bean id="personId" class="cn.bdqn.Person.Person" p:name="张三" p:age="20">
	</bean>

构造传参

<bean id="personId" class="cn.bdqn.Person.Person">
	<constructor-arg>
		<value>张三</value>
	</constructor-arg>
	<constructor-arg>
		<value>30</value>
	</constructor-arg>
</bean>
<bean id="personId" class="cn.bdqn.Person.Person">
	<constructor-arg value="张三" />
	<constructor-arg value="20"/>
</bean
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值