1 为什么要springboot?springboot跟spring的区别
Spring Boot是一个开源Java-based框架,用于创建微服务。它是由Pivotal团队创建的,用于快速开发生产级的Spring应用。Spring Boot让你可以不用或者只需要很少的Spring配置就能创建一个应用。
与Spring Framework相比,Spring Boot具有以下特点:
-
自动配置:Spring Boot可以根据在类路径上的jar依赖自动配置你的应用。例如,如果在类路径上检测到HSQLDB,则Spring Boot会自动配置内存数据库。你不需要编写配置代码。
-
开箱即用:Spring Boot内置了应用服务器(例如Tomcat),所以你可以直接运行应用。你不需要部署war文件。
-
生产准备的特性:Spring Boot具有内置的功能,例如健康检查和指标,这可以帮助你监控和管理生产应用。
-
无代码生成:Spring Boot不生成代码,绝对没有任何代码生成,也没有xml配置文件。
与Spring Framework相比,Spring Boot具有以下优势:
-
简化配置:Spring Boot通过自动配置和提供默认值,简化了Spring应用的配置。
-
快速开发:Spring Boot内置了很多模板代码和库,可以帮助你快速开发新的功能。
-
微服务准备:Spring Boot适合微服务的开发,因为它可以轻松地开发和部署独立的服务。
-
集成Spring生态系统:Spring Boot与Spring Data、Spring Security、Spring Batch等项目完美集成。
总之,Spring Boot让Spring应用的开发变得更加简单、快速和方便。对于Spring的开发者来说,Spring Boot是一个非常有用的工具。
2 springboot跟springcloud的区别
Spring Boot和Spring Cloud都是Spring的项目,但它们的关注点和用途有所不同。
-
目标:
- Spring Boot 的主要目标是简化Spring应用的创建和开发过程。它提供了一种新的方式来创建Spring应用,包括自动配置、生产就绪的功能和开箱即用的依赖管理。
- Spring Cloud 的目标是为开发者提供一些常见的模式用于构建分布式系统。它是一个工具集,用于帮助开发者在云计算环境中快速构建分布式应用。
-
功能:
- Spring Boot 提供了创建独立的Spring应用的方式。它可以帮助你快速启动、开发和运行Spring应用。它可以自动配置你的Spring应用,生产准备级的应用监控,集成了大量常用的第三方库配置。
- Spring Cloud 提供了一系列用于处理分布式系统中常见问题的解决方案。例如,它提供了服务发现(Service Discovery)、配置管理(Configuration Management)、路由(Routing)、负载均衡(Load Balancing)等功能。
-
使用场景:
- Spring Boot 通常用于构建单体应用或微服务,无论是Web应用还是后台服务。
- Spring Cloud 主要用于构建大型的分布式系统,通常是微服务架构的应用。它是建立在Spring Boot的基础上的,它用于简化分布式系统中的一些常见模式。
-
依赖关系:
- Spring Boot 是一个独立的项目,它可以不依赖于其他Spring项目。
- Spring Cloud 是建立在Spring Boot的基础上的,它使用Spring Boot来创建微服务并提供与云相关的功能。
总之,Spring Boot和Spring Cloud是为不同目的而设计的。Spring Boot是为了简化Spring应用的开发,而Spring Cloud是为了简化分布式系统的开发。如果你在开发一个分布式系统,你通常会同时使用这两个项目。
3 springboot的常用注解
Spring Boot提供了许多注解来简化Spring应用的配置和开发。以下是一些常用的注解:
-
@SpringBootApplication:标注一个主程序类,说明这是一个Spring Boot应用。
-
@ComponentScan:自动扫描并加载符合条件的组件或bean,将它们注册到容器(applicationContext)中。
-
@Configuration:声明当前类是一个配置类,用于替代XML配置文件。
-
@Bean:将一个方法的返回值注入到Spring容器。
-
@Autowired:自动注入Spring容器中的bean。
-
@Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
-
@Service:标注在服务类上,表示这是一个业务逻辑类。
-
@Controller:标注在控制器类上,表示这是一个Spring MVC控制器。
-
@RestController:标注在控制器类上,表示这是一个Spring MVC控制器,且返回的数据默认为JSON格式。
-
@RequestMapping:处理请求地址映射,用于类或方法上。该注解可以标明一个URL到类或方法的映射。
-
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping:处理详细的HTTP请求类型映射。
-
@PathVariable:用于获取路径变量。
-
@RequestParam:用于获取查询参数。
-
@RequestBody:用于获取请求体内容。
-
@ResponseBody:用于指定一个方法返回的结果直接写入HTTP响应正文中。
-
@Value:注入配置文件中的属性。
-
@Profile:指定组件在哪个环境下才能被注册到容器中。
-
@PropertySource:加载指定的配置文件。
-
@EnableAutoConfiguration:启用自动配置。
这些注解在Spring Boot应用开发中被广泛使用,可以极大地简化Spring应用的配置和开发。
4 springboot starter启动过程
4.1 概述
Spring Boot Starter是Spring Boot项目的一个核心概念。一个Starter是一个预配置的模板,它包含了一个或多个JAR依赖,以及可能的自动配置。它们的目的是简化Spring Boot应用的配置和开发过程。
以下是Spring Boot启动过程的一般步骤:
-
初始化Spring应用上下文:Spring Boot启动过程的第一步是创建一个Spring应用上下文,该上下文包含了应用中所有的Bean定义。
-
加载Spring Boot Starter依赖:Spring Boot会加载在项目中声明的所有Starter依赖。Starter是一种特殊的Spring Boot模块,它包含了一组有用的默认配置、JAR依赖和自动配置的代码。
-
加载应用属性 :Spring Boot会加载应用的属性配置文件,如
application.properties
或application.yml
。这些文件包含了应用的各种配置信息。 -
执行自动配置 :Spring Boot会执行自动配置的过程。这是通过
@EnableAutoConfiguration
注解完成的。自动配置会扫描应用上下文中的Bean,然后基于应用的配置和依赖自动配置Spring Bean。 -
创建并初始化Bean:在自动配置阶段之后,Spring Boot会创建并初始化应用上下文中的所有Bean。这些Bean包括应用中的所有组件、服务、控制器等。
-
启动内嵌的Web服务器:如果应用是一个Web应用,Spring Boot会启动一个内嵌的Web服务器(默认是Tomcat)来处理HTTP请求。
-
启动Spring应用 :最后,Spring Boot会启动Spring应用。这通常是通过调用
SpringApplication.run()
方法完成的。该方法会启动Spring应用并返回一个Spring应用上下文。 -
运行应用:应用现在已经启动并运行。它可以接受和处理HTTP请求,执行业务逻辑,访问数据库等。
总之,Spring Boot启动过程涉及初始化Spring应用上下文、加载Starter依赖、加载应用属性、执行自动配置、创建和初始化Bean、启动内嵌的Web服务器等步骤。这个过程简化了Spring应用的配置和开发过程,并使得Spring应用的启动变得更加快速和简单。
4.2 执行"自动配置"和"创建并初始化Bean"有什么区别"?
执行自动配置和创建并初始化Bean这两个步骤在Spring Boot应用启动过程中都是非常重要的,它们有不同的职责和作用:
-
执行自动配置 :这个步骤主要是为了自动配置Spring应用上下文中的Bean。自动配置是Spring Boot的一个重要特性,它可以根据应用的配置和依赖自动配置一些常见的Bean,如数据源、Web服务器、模板引擎等。这个过程是通过
@EnableAutoConfiguration
注解完成的。自动配置会扫描应用上下文中的Bean和配置,然后根据这些信息自动配置一些常见的Bean。这样可以简化应用的配置,让开发者更加专注于业务逻辑的开发。 -
创建并初始化Bean:这个步骤主要是为了创建和初始化Spring应用上下文中的所有Bean。这些Bean包括应用中的所有组件、服务、控制器等。这个过程是在自动配置阶段之后进行的。Spring会根据Bean的定义和依赖关系创建并初始化Bean,然后将这些Bean注入到应用中需要的地方。这个过程是Spring IoC(控制反转)容器的核心功能。
总之,执行自动配置和创建并初始化Bean这两个步骤有不同的职责和作用。执行自动配置主要是为了自动配置一些常见的Bean,spring.factories文件中的bean,而创建并初始化Bean主要是为了创建和初始化应用上下文中的所有Bean,指的是处理beanDefinitionMap中的bean元数据,即我们程序员自己写的@Componnet等注解标注的类。这两个步骤都是Spring Boot应用启动过程中非常重要的。
4.3 执行自动配置主要是为了自动配置一些常见的Bean,spring.factories文件中的bean,而创建并初始化Bean主要是为了创建和初始化应用上下文中的所有Bean,指的是处理beanDefinitionMap中的bean元数据,即我们程序员自己写的@Componnet等注解标注的类,对吗?
是的,你的理解是正确的:
-
执行自动配置 :主要是为了自动配置一些常见的Bean。这个过程是通过
spring.factories
文件中的配置来完成的。在这个文件中,Spring Boot列出了一些自动配置的类。当应用启动时,Spring Boot会自动加载这些类,并根据应用的配置和依赖自动配置一些常见的Bean。这些Bean通常是一些基础设施的组件,如数据源、Web服务器、模板引擎等。 -
创建并初始化Bean :主要是为了创建和初始化应用上下文中的所有Bean。这个过程包括处理
beanDefinitionMap
中的Bean元数据,以及根据这些元数据创建和初始化Bean。这些Bean包括我们程序员自己写的@Component
、@Service
、@Controller
、@Repository
等注解标注的类,以及其他一些通过XML配置或Java配置定义的Bean。
这两个步骤都是Spring Boot应用启动过程中非常重要的。执行自动配置主要是为了简化应用的配置,而创建并初始化Bean主要是为了初始化应用上下文中的所有Bean,这两个步骤都是Spring IoC(控制反转)容器的核心功能。
5 @autowire和@resource
5.1 @autowire和@resource注解是springboot中的注解吗
@Autowired
和 @Resource
注解都不是 Spring Boot 特有的,它们都来自于 Spring 框架本身。Spring Boot 是 Spring 的一个子项目,专注于简化 Spring 应用的创建和开发过程。
5.2 @autowire和@resource的区别
-
基因不同: 首先其最大的不同在于她们的爸爸妈妈不同(@Autowired是由org.springframework.beans.factory.annotation.Autowired提供,换句话说就是由Spring提供;@Resource是由javax.annotation.Resource提供,即J2EE提供,需要JDK1.6及以上。)
-
@Autowired
和@Resource
都用于自动装配 bean,但它们的工作方式有所不同。-
@Autowired :是 Spring 提供的注解。它根据类型来自动装配。如果存在类型的多个实现,则会按照 bean 的名称进行匹配。可以配合
@Qualifier
注解使用,通过指定的名字来匹配 bean。 -
@Resource :是 Java EE 提供的注解。它可以按照名称或类型进行自动装配。
@Resource
注解有一个属性name
,可以指定一个 bean 的名称进行注入。如果不指定name
属性,它会默认按照字段名称进行装配。
以下是两个注解的简单例子:
javapublic class MyClass { // 使用 @Autowired @Autowired private MyService myService; // 使用 @Resource @Resource(name = "myService") private MyService myService; }
总结来说,
@Autowired
是根据类型进行自动装配的(如果有多个同类型的 bean,则根据名字进行匹配),而@Resource
是默认按照名字进行自动装配的。 -