Spring中最主要的概念是DI(Dependcy Injection), IoC(Inversion of Control),AOP(Aspect Oriented Programming)。
IoC是通过DI实现的,DI是通过反射(Reflection)实现的,DI是技术实现,IoC是概念实现。Spring主要就是为了解耦对象间的依赖。
DI分开看,Dependcy:对象间的依赖,Injection:从Spring容器中选择一个对象A做为另一个对象B的组成部分(B中有一个private成员A)。
IoC中C:本来对象间的依赖是由程序在运行时让(控制)Java容器绑定的,但是Spring反过来了,Spring容器通过配置文件(XML或者Java配置类)去注入运行中的程序中对象间的依赖,所以说控制反转了(Inversion)。
Bean即表示Spring容器中一个实例对象,有单例模式:只有一个实例,或者每次都生产新的实例。Spring容器专门管理Beans的生产(Bean Factory),互相间关联连接(DI),销亡。
注解(Annotation)是Java语言的特性,并不是Spring特有,注解其实就是一个说明型的标签,主要用来让各种容器做判断的。
Java元数据(metadata)指描述数据的数据,比如bean的xml文件,java配置类。注解也是元数据。
装配即注入的意思,autowired自动装配,其实就两种:byname:根据配置文件中的bean的id查找,bytype:按照对象的类型查找。@Autowired使用bytype查找,当有多个或者多种同类型名实例时,可以配合@Qualifier(byname)来确定。
AOP说简单点就是将多个类中共同调用部分单独提取出来,做为一个切面实现,目的是解耦代码间的依赖。比如数据库事务操作(Transaction),web应用中的安全防火墙,对接收到的大部分(不是全部,所以是用注解可配置,不是框架性的全部配置)请求做过滤操作。如果学过Python,那么请参考装饰器。
Spring MVC属于Spring,专门用于开发Web application的Spring定制版。
Spring Boot基于Spring,更强大,却更简单,就像Windows和DOS之间的关系。主要提升:精化配置(不需要xml)、编码、部署(直接能打包成一个jar)、监控。
Spring Cloud基于Spring Boot,是一个包含一系列开发云服务的组件的体系。
-----------------------------------------------------------------------------------------------------------------------------
1. @Component @Configuration 区别:
参考https://blog.csdn.net/long476964/article/details/80626930
实例:
package org.zyd.java.spring.test.di.annotation.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Component
public class TextEditorConfig {
@Bean
public TextEditor textEditor() {
return new TextEditor(spellChecker());
}
@Bean
public SpellChecker spellChecker() {
return new SpellChecker();
}
}
这里spellChecker()会被spring容器执行两次,如果改成@Configuration,则只会执行一次。