写博客的目的:
1.记录自己的想法,方便追溯。
2.让大家纠正我想法中不正确的点,自我提高。
3.给在校的学弟学妹们或者刚工作的同事们一点点启发。
背景:
我在学校的时候其实也是听说过Spring的,也去查过Spring的资料,都是一些重复的词语,或者过于“专业”的描述,让人实在看不进去,因此其实一直在思考,Spring是什么,为什么需要Spring,怎么去用Spring。虽然现在也不算想的很清楚,但是感觉可以站在一个名词解释者的角度来输出一下我的想法。
直接搜Spring,我们会发现一系列名词开始洗脑,如下:
1. IOC
2. 控制反转
3. 依赖注入
4. AOP
5. 面向切面编程
看到这些不如心里默唱“淡黄的长裙,蓬松的头发...”,为了不耽误周末看直播,这次就先解释前三个词吧。
1. Spring为啥叫Spring?
最憨的说法是,因为是java开发者的春天(Spring)...
有趣的说法是,因为有冬眠(Hibernate)
2. 学术界代码和工业界写代码的区别
绝大多数情况下(为了严谨),学术界相对来说,代码量会小一点,项目结构会更简单,多数是数值仿真的代码,写出来的很多是一次性代码,在完成作业,课设,实验后,基本不会再拿来使用或者优化迭代。来公司后,发现公司的代码是需要维护的,这里的维护有两层含义,一个是修改原有代码的bug,二是增加新的功能。
言归正传:
3. IOC
IOC的全称是Inversion Of Control,中文名:控制反转(开始洗脑),首先我们需要把控制反转给补充完整,
(1)控制?
控制 = 创建/管理对象
(2)反转?
反转:与正常的控制(把(1)的控制赋值进来)相反,即与正常的创建/管理对象相反
(3)控制反转?
把(2)赋值进来,与正常的创建/管理对象相反
(4)正常的创建对象,管理对象的流程?
正常的创建对象:以Person为例
public class Person {
private String name;
private int age;
}
我们去创建对象的时候,最正常的方式是
Person person = new Person();
结论:我们(写代码的人)来控制创建对象,创建流程是采用new的方式。
(5)与正常的创建/管理对象相反指的是?
某个东西去控制创建对象,这个事情现在不交给我们直接new,这个东西就是Spring。
4.依赖注入
依赖注入:英文全称Dependency Injection,缩写DI,
(1)依赖注入的全称:创建对象时,该对象依赖的东西注入到该对象中,
以Person为例:
传统方式(在学校时):
public class Person {
private String name;
private int age;
private Body body;
private Soul soul;
public Person(String name, int age, Body body, Soul soul) {
this.name = name;
this.age = age;
this.body = body;
this.soul = soul;
}
}
创建Person对象的方式:
Person person = new Person(
"zhangsan",
20,
new Body(),
new Soul()
);
创建Person对象时,发现Person对象依赖name,age,body,soul这四个属性,但是body和soul是两个对象,因此上面的代码采用的是,我们(写程序的人)通过new对象来进行注入的。
总结一下:在创建对象时,我们通过new出该对象的依赖,然后手动注入(填充到构造方法中去)到该对象中
使用Spring(工作中):
//Spring帮大家创建好了,现在可以拿出来用
Body body;
//Spring帮大家创建好了,现在可以拿出来用
Soul soul;
Person person = new Person(
"zhangsan",
20,
body,
soul
);
总结一下:依赖注入,本质上就是Spring帮我们完成了手动生成一个对象再注入的步骤,并且依赖注入是创建对象也就是控制反转中的一环
全文总结
1.IOC/控制反转:就是把控制创建/管理对象的权利交给Spring,我们利用Spring去完成对象的创建/控制。
2.依赖注入/DI:就是在创建对象时,不用我们自己去把需要的属性填充到构造器中,又是把苦力活扔给Spring去完成。