Hello Spring理解IoC、DI
本文介绍在IntelliJ IDEA中配置Spring环境及Spring的简单例子进而理解IoC(控制反转)和DI(依赖注入)
配置环境
首先新建项目
命名后直接finish
系统会自动帮你下载所需要的包
然后在src目录下新建一个xml文件
Hello Spring
在src目录下开始编写我们的hello world
1 | public class HelloWorld { |
- 用传统的方法:
1 | public static void main(String args[]){ |
- 用Spring框架
首先在spring-config文件中进行配置:
<bean id="helloWorld" class="HelloWorld">
<property name="name" value="Spring"></property>
</bean>
这里可能不理解这些参数的含义,等看完main就知道了:
1 |
|
输出结果:
spring-config文件中的id就是Ioc容器获取的bean实例的id,name就是变量名,value就是set方法中传入的参数。
我们再加一个setAge()
这时候我们再来看Spring
它就是把所有的方法、值通过配置文件传给Ioc容器,这样在原本主函数中,属于某个对象的权力都转给了配置文件,实现了主函数(对象)同类之间的解耦。
在MVC框架中,相当于将View层脱离了出来。
IoC(控制反转)、DI(依赖注入)
参考文章:https://blog.csdn.net/qq_42709262/article/details/81951402
控制反转IoC
通过上面的代码,我们可以看到,所有的类都会在Spring容器中登记,然后Spring在程序运行到合适的时候会把你需要的东西传给你,同时也把你传给需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
传统的方法就像是自己去找女朋友,主动权都在你的手里,你会遇到很多妹子,自己去了解她们的喜好、电话、QQ、微信,这都是你自己去搞定的。在面向对象的思想里面,我们在使用一个对象时,必须自己去找到她,然后还要负责创建、销毁。
而IoC就相当于你通过婚介去找妹子,婚介把你的信息和许多妹子的信息保存起来,婚介根据你提供的信息去帮你找,如果找到的妹子跟你提供的信息不符合,你就给他报错。这时候,主动权就都交给了婚介,你这时候并不是面对着众妹子,而是面对着婚介。
依赖注入DI
依赖注入和控制反转其实是对相同事情在不同层面的描述。
IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2470290795@qq.com
文章标题:Hello Spring理解IoC、DI
文章字数:1.1k
本文作者:runze
发布时间:2020-03-03, 11:22:23
最后更新:2020-03-03, 11:22:40
原始链接:http://yoursite.com/2020/03/03/Spring/Hello%20Spring/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。