微服务专题01-Spring Application

前言

前面的章节我们讲了源码分析专题分布式专题工程专题。从本节开始,进入微服务专题的讲解,共计16小节,分别是:

本节内容重点为:

  • 自定义 SpringApplication:介绍 SpringApplicationSpringApplicationBuilder 的API调整
  • 配置 Spring Boot 源:理解 Spring Boot 配置源
  • SpringAppliation 类型推断:Web 应用类型、Main Class 推断
  • Spring Boot 事件:介绍 Spring Boot 事件与 Spring Framework 事件之间的差异和联系

自定义 SpringApplication

如图所示,在官网上快速搭建一个 SpringBoot 项目,通常把它称为 SpringBoot 的脚手架。
在这里插入图片描述
最简单的SpringBoot项目也会包括SpringApplication启动类,所以通常我们将SpringApplication作为一切的起点,首先看看这个类是如何定义的

SpringApplication 的详细讲解

展开刚才我们通过脚手架创建的代码,直接查看启动类:

@SpringBootApplication
public class DemoApplication {
   
    public static void main(String[] args) {
   
        SpringApplication.run(DemoApplication.class, args);
    }
}

这就是最简化版本的 SpringBoot 启动类,这里有两个地方值得我们注意:
一个是类 SpringApplication ,另外一个是注解 @SpringBootApplication

Q: 什么是 SpringApplication

A: SpringApplication 是 Spring Boot 驱动 Spring 应用上下文的引导类。

Q:怎么理解注解 @SpringBootApplication ?

A:直接查看此注解的源码,源码如下:

/**
* @since 1.2.0
*/
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
   
		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
   
    ...
}

这里有三个注解值得注意:

  1. @ComponentScan 是用于定义扫描的路径,从中找出标识了需要装配的类自动装配到 Spring 的 Bean 容器中。
  2. @EnableAutoConfiguration 是激活自动装配,用于自动载入应用程序所需的所有 Bean。
  3. @SpringBootConfiguration 用于标注当前类是配置类,并会将当前类内声明的一个或多个以 @bean 注解标记的方法的实例纳入到 Spring 容器中,它与 @Configuration,在功能上是一致的。

Q: 如何理解 @Component 的“派生性”?

A:@Component 是用来把普通 pojo 实例化到 Spring 容器中,相当于配置文件中的<bean id="" class=""/>,通常我们将 @Component 称之为元注解,所谓的派生性指的是以元注解为基准,其他注解再次调用元注解而产生的派生。

Spring 注解编程模型

推荐一篇关于 Spring 注解编程模型的 Wiki

这里再看一下在 SpringBoot 常见的注解,诸如 @Service@Repository@Controller@Configuration。在 Spring 源码里,其实都是引入了 @component,作为这些注解的元注解。

@component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

  1. @Service :用于标注业务层组件。

    @Component
    public @interface Service {
         
        ...
    }
    
  2. @Repository:用于标注数据访问组件,即 DAO 组件。

    @Component
    public @interface Repository {
         
        ...
    }
    
  3. @Controller:用于标注控制层组件。

    @Component
    public @interface Controller {
         
        ...
    }
    
  4. @Configuration :允许通过调用同一类中的其他 @Bean 方法来定义 Bean 之间的依赖关系。

    @Component
    public @interface Configuration {
         
    	...
    }
    

Spring 模式注解:Stereotype Annotations

所谓的模式注解:@component逻辑上与@Service@Repository@Controller@Configuration都是一样,只是物理层面上不同,但都是为了找到BeanDefinition。

Spring 注解驱动示例

区别于ClassPathXmlApplicationContext以xml配置文件驱动,注解驱动的上下文是 AnnotationConf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值