`
baining97
  • 浏览: 103305 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

IOC的实现原理

阅读更多

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提供的setUserDaoUserDao实现的对象赋给userDao,这种用set函数设值的方式有叫做type3,用构造器设值叫做type2,用接口设值成为type1.

那么怎么才能在运行时期把userDao设置上去呢,答案是通过反射机制,在运行时,通过反射反射出UserDao的实现类的对象,并通过反射得到UserServiceImplsetUserDao方法,将刚才反射得到的UserDao实现类的对象传给setUserDao方法,就完成了设值工作。这些设值的工作是在加载spring文件构造Bean工厂的时候就完成的.所以启动完毕,每个对象中的需要注射的属性是有值的.就是这样的达到容器管理Bean的效果.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics