Spring IOC(控制反转)
控制反转:
在使用了Spring框架之后对象不在由调用者来创建,而是由Spring容器来创建
Spring容器会负责控制程序之间的关系而不是由调用者的程序代码直接控制
这样控制权由应用程序转移到了Spring容器,控制权发生了反转,这就是Spring控制反转
获得依赖对象的过程被反转了,控制反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入
于是"控制反转"也叫"依赖注入"(Dependency Injection)简写(DI)所谓的依赖注入,就是由IOC容器在运行期间
动态的将某种依赖关系注入到对象之中
所以,依赖注入(DI)和控制反转(IOC)是从不同角度的描述的同一件事情,就是指通过引入IOC容器
利用依赖关系注入的方式,实现对象之间的解耦
实例代码:
1,普通数据类型和集合的注入
【1】创建user实体类 提供set方法以及构造和toString
【2】编写配置文件
<bean id="user" class="com.bdqn.cn.pojo.User">
<!-- 通过构造注入 -->
<!-- <constructor-arg index="0" value="张三"/>
<constructor-arg index="1">
<list>
<value>list1</value>
<value>list2</value>
</list>
</constructor-arg>
<constructor-arg index="2">
<map>
<entry key="hhh" value="哈哈哈"/>
<entry key="zzz" value="啧啧啧"/>
<entry key="bbb" value="不不不"/>
</map>
</constructor-arg>
<constructor-arg index="3">
<set>
<value>张三</value>
<value>李四</value>
<value>王五</value>
</set>
</constructor-arg>
<constructor-arg index="4">
<array>
<value>aaaaaaaa</value>
<value>bbbbbbbb</value>
</array>
</constructor-arg> -->
<!-- 通过setter方法注入参数 -->
<property name="username" value="赵云" />
<property name="list">
<list>
<value>看书</value>
<value>学习</value>
</list>
</property>
<property name="map">
<map>
<entry key="guangshou" value="广州" />
<entry key="shanghai" value="上海" />
<entry key="shenzhen" value="深圳" />
</map>
</property>
<property name="set">
<set>
<value>关羽</value>
<value>张飞</value>
<value>赵云</value>
<value>马超</value>
<value>黄忠</value>
</set>
</property>
<property name="array">
<array>
<value>aaaaaaaa</value>
<value>bbbbbbbb</value>
</array>
</property>
</bean>
【3】编写测试类
2,对象注入
【1】创建接口和实现类
【2】创建业务层
public class UserServiceImpl implements UserService {
//这里只是声明 没有具体实现
private UserDao userDao;
//给userDao传入参数 set方式
/* public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}*/
//构造方法形式
public UserServiceImpl(UserDao userDao) {
super();
this.userDao = userDao;
}
@Override
public void say() {
this.userDao.say();
System.out.println("UserServiceImpl...");
}
}
【3】编写配置文件
【4】编写测试类