1、Spring IOC
1)IOC全称Inversion Of Control,被翻译成控制反转
2)控制反转:指程序中对象的获取方式发生反转,由最初的NEW方式创建,转变为由第三方框架创建,注入(DI),它降低对象之间的耦合度
3)Spring容器采用DI方式实现IOC控制,IOC是Spring框架的基础和核心
4)DI全称是Dependency Injection,被翻译成依赖注入,依赖注入的基本原理是:将一起工作具有关联关系的对象通过方法参数传入,建立关系,因此容器的工作就是创建Bean对象时注入依赖关系
注意:IOC是一种思想,而DI是实现IOC的主要技术途径
5)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;
}
}
6)自动装配
Spring容器可以自动装配(autowire)相互协作Bean之间的关联关系,autowire可以针对单个Bean进行设置,方便之处在于减少XML注入配置
在配置文件中,可以在<bean>标签中使用autowire属性指定自动装配的规则,一共有三种类型值:
byName:根据属性名自动装配,此选项将检查容器,根据名字查找与属性名一致的Bean,然后将其与属性自动装配(setter注入)
byType:如果容器中存在一个与指定属性类型相同的Bean,则将与此属性自动装配(setter注入)
constructor:与byType方式类似,不同之处在于它应用于构造器方式(构造器注入)
2、参数值注入
1)注入基本值
可以通过<value>标签或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>
3、基于注解依赖注入
具有依赖关系的Bean对象,可以使用以下任意一种注解实现注入:
1)@Autowired/@Qualifer
可以处理构造器注入和Setter注入
@Autowired写在构造器或set方法前,声明需要为其注入Bean
@Qualifer写在参数前面,声明注入的Bean的id
@Autowired/@Qualifer也可以写在属性上,作用和写在set方法上类似,但只会执行一行代码(赋值代码)
注意:注入对象是单例时,@Qualifer可省略,此时Spring按照参数类型匹配参数值
@Resource:只能处理Setter注入
@Resource也可以写在属性上,作用和写在set方法上类似,但是只会执行一行代码(赋值代码)
注意:注入对象是单例时,(name="标识符")可省略,此时Spring按照参数类型匹配参数值