前言
学习spring内容记录
一、Spring是什么?
平常的Java开发中,程序员在某个类中需要依赖其它类的方法。 通常是new一个依赖类的实例再调用该实例的方法,这种开发存在的问题是new的类实例不好统一管理。
Spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过Spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。
依赖注入的另一种说法是”控制反转”IOC。通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员。而控制反转是指new实例工作不由我们程序员来做而是交给Spring容器来做
简单来说,Spring是一个轻量级的**控制反转(IoC)和面向切面(AOP)**的容器框架,用来装java bean(java对象)。也可以称为可插拔式开发框架,像插头和插座一样,插上就用,不用就拔下来。这就是Spring框架核心理念。
IOC:一种容器,实现控制反转(获得依赖对象的过程被反转了),应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护。
DI:依赖注入(控制反转),是IOC的一种实现方式,创建对象并且组装对象之间的关系。
Spring中通过IOC容器来让我们调用对象时无需先创建对象(new一个对象),原来我们写代码的时候,在一个类中调用其他类的方法或变量,如果这个方法或变量不是静态的,那么我们就需要先new出这样一个对象,再通过对象名调用其方法或变量(这样会导致代码结构复杂,耦合度高,难以复用,也难以进行单元测试),现在有了Spring,Spring解放了我们的双手,降低了我们的代码耦合度,我们只需要定义这样一个类型的成员变量,无需new出来,然后通过一些配置方式让这个类型的实例注入到该类中(这实际上是个实例化的过程),这也就是我们所说的依赖注入的概念。
二、Java bean 和 Spring Bean
JavaBean 是特殊的 Java 类,使用 Java 语言书写,并且遵守 JavaBean API 规范。 JavaBean 与其它 Java 类相比而言具有以下几个独一无二的特征:
♦ 类必须是具体的和公共的,提供一个默认的无参构造函数。
♦ 需要被序列化并且实现了 Serializable 接口。
♦ 可能有一系列可读写属性。
♦ 可能有一系列的 getter 或 setter 方法
2.1 Java Bean 示例
package com.runoob;
public class StudentsBean implements java.io.Serializable
{
private String firstName = null;
private String lastName = null;
private int age = 0;
public StudentsBean() {
}
public String getFirstName(){
return firstName;
}
public String getLastName(){
return lastName;
}
public int getAge(){
return age;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
public void setAge(int age) {
this.age = age;
}
}
Spring容器对Bean没有特殊要求,不像java Bean一样遵循一些规范
在传统的java应用中,bean的生命周期很简单。使用java关键字new进行bean实例化,然后该bean就可以使用。一旦这个bean不再使用,则有java自动进行垃圾回收。
在Spring中,Bean的创建是由Spring容器进行的。也就是说,在Spring中使用Bean的时候,不是由关键字New来创建实例
2.2 Spring Bean
所谓装配Bean,就是将一个个的Bean分别注入到对应的类中去,那么,Spring中,提供了三种注入方法:
- 在XML文件中显式配置
- 在JAVA中显式配置(JavaConfig)
- 隐式的bean发现机制和自动装配
Spring框架本质上作为一个容器的角色存在,我们程序中对象的创建,以及对象间的依赖关系都交由Spring来完成,当我们需要使用对象时,只需向spring容器获取即可,实现了模块间、对象间的解耦,所有对象信息都配置在applicationContext.xml配置文件中,当Spring框架启动时,创建spring容器,读取applicationContext.xml配置文件对象对象到spring容器中去。程序后续使用对象时都从spring容器中获取(getBean方法)。
参考:
https://zhuanlan.zhihu.com/p/50528891
https://www.zhihu.com/question/398256955/answer/1254321910
四、spring中的设计模式
https://www.iteye.com/blog/bijian1013-2274150