Hello Spring理解IoC、DI

  1. 配置环境
  2. Hello Spring
  3. IoC(控制反转)、DI(依赖注入)

本文介绍在IntelliJ IDEA中配置Spring环境及Spring的简单例子进而理解IoC(控制反转)和DI(依赖注入)

配置环境

首先新建项目

命名后直接finish

系统会自动帮你下载所需要的包

然后在src目录下新建一个xml文件

Hello Spring

在src目录下开始编写我们的hello world

1
2
3
4
5
6
7
8
9
public class HelloWorld {
private String name;
public void setName(String name){
this.name=name;
}
public void sayHello(){
System.out.println("Hello"+name);
}
}
  • 用传统的方法:
1
2
3
4
5
public static void main(String args[]){
HelloWorld hello = new HelloWorld();
hello.setName("Spring");
hello.sayHello();
}
  • 用Spring框架

首先在spring-config文件中进行配置:

<bean id="helloWorld" class="HelloWorld">
    <property name="name" value="Spring"></property>
</bean>

这里可能不理解这些参数的含义,等看完main就知道了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class main {
public static void main(String[] args){
//1.创建一个Spring 得Ioc容器对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//2.从Ioc容器中获取bean实例
HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld");
//3.调用sayHello()方法
helloWorld.sayHello();
}
}

输出结果:

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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏