自定义{name}-spring-boot-starter
2021-07-18 20:23:43 0 举报
AI智能生成
仅限学习
作者其他创作
大纲/内容
基础回顾
微服务发展历程
Servlet+JSP
Spring
Spring 特性
IOC
DI DL
AOP
Spring MVC
applicationContext.xml
注解
1.X
<bean name="" class=""/>
2.X
@Required、@Repository@Aspect等注解
2.5
@Autowired
@Qualifier
@Primary
@Component、@Service 组件声明
@Controller、@RequestMappring等spring mvc的注解
@Qualifier
@Primary
@Component、@Service 组件声明
@Controller、@RequestMappring等spring mvc的注解
3.x
@Configuration 去xml化 ,由于JDK5支持javaConfig
Component-Scan - @Service @Repository @Controller
Import
4.X
@Conditional
@Import
@ComponentScan
5.X
@Indexed
SSH(sping +struts/springMVC+ hibernate)
SSM(sping +springmvc+mybatis)| Dubbo +Spring
微服务 Spring Boot
约定优于配置
基于maven 的结构化规约(默认jar包,默认resource,等结构)
内置tomcat,resource/templete|static (spring boot-starter-web)
application.yml(properties)
通过 spring.profiles.active 属性
.EnableAutoConfiguration 默认对于依赖的 starter 进行自动装载
比spring新增的特性
AutoConfiguration
Starter
什么是starter
开箱即用
注入XXXTemplate
自动装配
importSlector
Registrar(ImportBeanDefinitionRegistrar)
@Configuration
@ComponentScan
Registrar(ImportBeanDefinitionRegistrar)
@Configuration
@ComponentScan
SPI
目录结构一致
文件名一致
key要存在且符合当前的加载
举例
JDBC
Dubbo
spring.factories
spring-autoconfigure-metadata.properties
条件装配
注解 方式一 @ConditionOnBean
约定的文件 方式二 META-INF/spring-autoconfigure-metadata.properties
@ConditionalOnBean 在存在某个 bean 的时候
@ConditionalOnMissingBean 不存在某个 bean 的时候
@ConditionalOnClass 当前 classpath 可以找到某个类型的类时
@ConditionalOnMissingClass 当前 classpath 不可以找到某个类型的类时
@ConditionalOnResource 当前 classpath 是否存在某个资源文件
@ConditionalOnProperty 当前 jvm 是否包含某个系统属性为某个值
@ConditionalOnWebApplication 当前 spring context 是否是 web 应用程序
@ConditionalOnMissingBean 不存在某个 bean 的时候
@ConditionalOnClass 当前 classpath 可以找到某个类型的类时
@ConditionalOnMissingClass 当前 classpath 不可以找到某个类型的类时
@ConditionalOnResource 当前 classpath 是否存在某个资源文件
@ConditionalOnProperty 当前 jvm 是否包含某个系统属性为某个值
@ConditionalOnWebApplication 当前 spring context 是否是 web 应用程序
Actuator
Spring Boot CLI
注解
@Enable spring3.1
@EnableScheduling
@EnableCaching
@SpringBootApplication
@EnableAutoConfiguration
@AutoConfigurationPackage
@Import({Registrar.class})
Registrar
ImportBeanDefinitionRegistrar.registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry)
@Import({AutoConfigurationImportSelector.class})
AutoConfigurationImportSelector.selectImports()
this.getAutoConfigurationMetadata()
AutoConfigurationMetadataLoader.loadMetadata()
元数据META-INF/spring-autoconfigure-metadata.properties
条件注入 ConditionalOnClass
AutoConfigurationImportSelector.selectImports(AnnotationMetadata annotationMetadata)
this.getAutoConfigurationEntry(annotationMetadata)
org.springframework.core.io.support.SpringFactoriesLoader#loadSpringFactories
this.getCandidateConfigurations(annotationMetadata, attributes);
SpringFactoriesLoader.loadFactoryNames()
(List)loadSpringFactories()
this.getCandidateConfigurations(annotationMetadata, attributes);
SpringFactoriesLoader.loadFactoryNames()
(List)loadSpringFactories()
exclude:this.getExclusions(annotationMetadata, attributes);
@ComponentScan
@Component
@Service
@Repository
@Controller
@Configuration
理解
等价于@Component
相当于applicationContext.xml文件
基于java开始支持javaConfig
Spring Cloud Netflix | Spring Cloud Alibaba
常见的starter组件分析
非spring官方starter组件
命名 {name}-spring-boot-starter
实现
EnableAutoConfiguration
SPI
举例
dubbo-spring-boot-starter
官方spring starter组件
命名 spring-boot-starter-{name}
实现
SPI
比较特殊 spring-boot-autoconfigure-2.1.6.RELEASE.jar官方内置了
EnableAutoConfiguration
举例
spring-boot-starter-redis
spring-boot-starter-web
spring-boot-starter-jdbc
spring-boot-starter-test
自定义starter组件
简单demo展示
真实starter展示
0 条评论
下一页