大家好,我是IT修真院郑州分院第七期的学员冯亚超,一枚正直纯洁善良的JAVA程序员 今天给大家分享一下,SPRING中的IOC是什么意思,为什么要用IOC而不是NEW来创建实例?
1.背景介绍
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法。这种开发存在的问题是 new 的类实例不便于统一管理,spring 提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。
2.知识剖析
IOC即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”
谁控制谁,控制什么?IoC 容器控制了对象主要控制了外部资源获取
为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。
谁依赖于谁:当然是应用程序依赖于IoC容器;
为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。
spring依赖注入的形式
1、Setter方法注入
2、构造方法注入
3、静态工厂的方法注入
4、实例工厂的方法注入
手动装配
通过在 或者 标签中使用ref属性,在上一小节的“依赖注入”部分使用的就是手动装配
ref即引用,引用一个bean
value给对象属性赋值
自动装配
我们可以通过 @Autowired 在 Bean 类中使用自动装配功能
@Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qualifier一起使用;
3.常见问题
什么是Bean?
byName与 byType有什么区别?
4.解决方案
什么是Bean?
由IoC容器管理的那些组成你应用程序的对象我们就叫它Bean, Bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。
byName:通过属性的名字的方式查找JavaBean依赖的对象并为其注入
byType:通过属性的类型查找JavaBean依赖的对象并为其注入
5.编码实战
6.扩展思考
spring的依赖注入到底有什么优势?
让使用者不需要自己去创建或获取自己的依赖,既然创建或获取的过程不是使用者控制的。
这也就意味着,当我需要切换依赖时,不需要改变使用者的代码。这当然要结合面向接口编程等思想,也许有人要说我一个接口就只有一个实现,何必用接口,我也基本不会去切换自己的实现。
说的对,然而就算你只有一个实现。 但是你往往会用到AOP吧,其实用代理对象替换原对象也算是切换了实现。什么日志,权限检查,异常处理等等需求。
7.参考文献
http://hck.iteye.com/blog/1578641
http://blog.csdn.net/jiesa/article/details/48649205
http://blog.csdn.net/u011225629/article/details/47143051
--------------------------------------------------------------------------------------------------------------------
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧 !