IoC就是Inversion of Control,控制反转。在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。
IOC
也是利用
JAVA
的反射机制
,IOC
注重的是代码关系之间的无侵入性,具体来说
spring
更注意这个特点,就是说要将代码之间的关系隔离到代码外部
,
在
xml
文件中进行配置
,
每当代码结构变更时
,
双方的代码都不要被改动即可实现移植
.
"
如果你需要一个东西
,
那么不是你自己去取
,
而是发个指令,有人会送给你
","
站着别动,我来找你
".
这两句话什么意思呢
,
比方说
public UserServiceImpl{
UserDao userDao;
setUserDao(UserDao userDao){
this.userDao = userDao;
}
}
这个
userDao,
不需要
UserServiceImpl
自己去创建这个
UserDao
对象
,
由
IOC
容器主动根据
UserServiceImpl
提供的
setUserDao
将
UserDao
实现的对象赋给
userDao,
这种用
set
函数设值的方式有叫做
type3,
用构造器设值叫做
type2,
用接口设值成为
type1.
那么怎么才能在运行时期把
userDao
设置上去呢
,
答案是通过反射机制
,
在运行时
,
通过反射反射出
UserDao
的实现类的对象
,
并通过反射得到
UserServiceImpl
的
setUserDao
方法
,
将刚才反射得到的
UserDao
实现类的对象传给
setUserDao
方法
,
就完成了设值工作。这些设值的工作是在加载
spring
文件构造
Bean
工厂的时候就完成的
.
所以启动完毕,每个对象中的需要注射的属性是有值的
.就是这样的达到容器管理
Bean
的效果
.