Spring IOC
IOC全称是Inversion Of Control,被译为控制反转
IOC是指程序中对象的获取方式发生反转,由最初的new方式创建,转变为由第三方框架创建,注入(DI)它降低了对象之间的耦合度
Spring容器是采用DI方式实现了IOC控制,IOC是Spring框架的基础和核心
DI全称是Dependency Injection,被译为依赖注入
public class User{
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
}
在容器xml配置中,配置注入参数
<bean id="user" class="com.ms.bean.User" >
<property name="name" value="张三">
</bean>
构造器注入是通过用带参数的构造器来实现的,容器在bean被实例化的时候,根据参数类型执行相应的构造器
public class User{
private String name;
private Integer age;
public User(String name,Integer age){
this.name=name;
this.age=age;
}
}
在容器xml配置中,配置注入参数(按照构造参数索引指定注入)
<bean id="user" class="com.ms.bean.User">
<constructor-arg index="0" value="张三"/>
<constructor-arg index="1" value="18"/>
</bean>
自动装配
Spring IOC容器可以自动装配(autowire)相互协作Bean之间的关联关系
autowire可以针对单个bean进行设置,能够减少xml的注入配置
在xml配置文件中,可以在<bean>元素中使用autowire属性指定自动装配规则,一共有五种类型
no 禁用自动装配,默认值
byName 根据属性名称自动装配,此选项将检查容器根据名字查找与属性完全一致的Bean,进行自动装配
byType 如果容器中存在一个与指定属性类型相同的Bean,则进行自动装配
constructor 与byType的方式类似,不同之处在于它应用于构造器参数
autodetect 通过Bean类来决定是使用constructor还是byType方式进行自动装配,如果发现默认的构造器,则使用byType方式
IOC全称是Inversion Of Control,被译为控制反转
IOC是指程序中对象的获取方式发生反转,由最初的new方式创建,转变为由第三方框架创建,注入(DI)它降低了对象之间的耦合度
Spring容器是采用DI方式实现了IOC控制,IOC是Spring框架的基础和核心
DI全称是Dependency Injection,被译为依赖注入
DI的基本原理就是将一起工作具有关系的对象通过构造构造方法参数或方法参数传入建立关系,因此容器的工作就是创建Bean时注入依赖关系
IOC是一种思想,反转资源获取的方向,也就是说容器主动地将资源推送给它所管理的组件,组件需要做的事情就是选择一种合适的方式去接受资源,
这种行为也被称为查找的被动形式 而DI是IOC的另外一种表达方式:组件以一种预先定义好的方式接受来自容器的资源注入,也是是实现IOC的主要技术途径
生活中的IOC
以前我们去买菜 需要走到菜市场自己挑选买菜 而现在使用了IOC容器 就不需要再辛辛苦苦地跑到市场上去了 只要在门口放一个篮子 这些菜就会自动的来到我们家
IOC演变
1接口
2工厂模式
3容器(工厂模式的升级 配置 反射 生成相关对象)
DI主要有两种注入方式:Setter注入 和构造器注入
Setter注入通过调用无参构造器或无参static工厂方法实例化Bean之后,调用此Bean的setter方法,即可实现Setter方式注入public class User{
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
}
在容器xml配置中,配置注入参数
<bean id="user" class="com.ms.bean.User" >
<property name="name" value="张三">
</bean>
构造器注入是通过用带参数的构造器来实现的,容器在bean被实例化的时候,根据参数类型执行相应的构造器
public class User{
private String name;
private Integer age;
public User(String name,Integer age){
this.name=name;
this.age=age;
}
}
在容器xml配置中,配置注入参数(按照构造参数索引指定注入)
<bean id="user" class="com.ms.bean.User">
<constructor-arg index="0" value="张三"/>
<constructor-arg index="1" value="18"/>
</bean>
自动装配
Spring IOC容器可以自动装配(autowire)相互协作Bean之间的关联关系
autowire可以针对单个bean进行设置,能够减少xml的注入配置
在xml配置文件中,可以在<bean>元素中使用autowire属性指定自动装配规则,一共有五种类型
no 禁用自动装配,默认值
byName 根据属性名称自动装配,此选项将检查容器根据名字查找与属性完全一致的Bean,进行自动装配
byType 如果容器中存在一个与指定属性类型相同的Bean,则进行自动装配
constructor 与byType的方式类似,不同之处在于它应用于构造器参数
autodetect 通过Bean类来决定是使用constructor还是byType方式进行自动装配,如果发现默认的构造器,则使用byType方式