Spring IOC--控制反转

1.Spring IOC
IOC全称Inversion Of Control,被翻译成控制反转
控制反转是指程序中对象的获取方式发生反转,由最初的NEW方式
创建,转变为由第三方框架创建,注入(DI),它降低对象之间的
耦合度


Spring容器采用DI方式实现IOC控制,IOC是Spring框架的基础和
核心

DI全称是Dependency Injection,被翻译成依赖注入,依赖注入的
基本原理是将一起工作具有关联关系的对象通过方法参数传入,建
立关系,因此容器的工作就是创建Bean对象时注入依赖关系


IOC是一种思想,而DI是实现IOC的主要技术途径

DI主要有两种注入方式,即Setter注入和构造器注入


1)Setter注入
public class B{}

public class A{
private B b;

public void setB(B b){
this.b = b;
}
}

2)构造器注入
public class B{}

public class A{
private B b;

public A(B b){
this.b = b;
}

}


自动装配
Spring容器可以自动装配(autowire)相互协作Bean之间的关联
关系,autowire可以针对单个Bean进行设置,方便之处在于减少
XML注入配置


在配置文件中,可以在<bean>标签中使用autowire属性指定自动
装配的规则,一共有三种类型值


byName:根据属性名自动装配,此选项将检查容器,根据名字查
找与属性名一致的Bean,然后将其与属性自动装配(
setter注入)
byType:如果容器中存在一个与指定属性类型相同的Bean,则将
与此属性自动装配(setter注入)
constructor:与byType方式类似,不同之处在于它应用于构造器

方式(构造器注入)

 

2.参数值注入
1)注入基本值
<value>标签可以通过字属性符串指定或构造器参数的值,容器
将字符串从java.lang.String类型转换为实际的属性或构造器参
数类型,然后给Bean对象注入


2)注入Bean对象
注入外部Bean(引用方式,方便重用)


3)注入集合
通过<list>,<set>,<map>,<props>标签来定义与Java中
对应的List,Set,Map及Properties的属性值


List,Set,Map及Properties都可以采用引入方式,<util:list>
<util:set>,<util:map>,<util:properties>


4)注入Spring表达式
Spring表达式语言,和EL表达式在语法上很相似,可以读取一
个Bean对象或集合中的数据


5)注入NULL或空字符串
Spring将属性的空参数当做空String
<bean>
<property name="name" value=""/>
</bean>

如果需要注入NULL,可以使用<null>标签
<bean>
<property name="name">
<null/>
</property>
</bean>

3.基于注解依赖注入
具有依赖关系的Bean对象,可以使用以下任意一种注解实现注入

@Autowired/@Qualifer
可以处理构造器注入和Setter注入
@Autowired写在构造器或set方法前,声明需要为其注入Bean,
@Qualifer写在参数前面,声明注入Bean的id

@Autowired/@Qualifer也可以写在属性上,作用和写在set方
法上类似,但是只会执行一行代码(赋值代码)


注意:注入对象是单例时,@Qualifer可省略,此时Spring按照
参数类型匹配参数值

@Resource
只能处理Setter注入

@Resource也可以写在属性上,作用和写在set方法上类似,但
是只会执行一行代码(赋值代码)

注意:注入对象是单例时,(name="标识符")可省略,此时
Spring按照参数类型匹配参数值

问题:
@Autowired与@Resource的区别

注入基本值或Spring表达式
@Value注解可以注入基本值或Spring表达式值
语法:
@Value("张三")
@Value("#{user.name}")

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值