自定义{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等注解<br>
2.5
@Autowired <br>@Qualifier <br>@Primary<br>@Component、@Service 组件声明<br>@Controller、@RequestMappring等spring mvc的注解<br>
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<br>Registrar(ImportBeanDefinitionRegistrar)<br>@Configuration<br>@ComponentScan<br>
SPI
目录结构一致
文件名一致
key要存在且符合当前的加载
举例
JDBC
Dubbo
spring.factories
spring-autoconfigure-metadata.properties
条件装配
注解 方式一 @ConditionOnBean
约定的文件 方式二 META-INF/spring-autoconfigure-metadata.properties
@ConditionalOnBean 在存在某个 bean 的时候<br>@ConditionalOnMissingBean 不存在某个 bean 的时候<br>@ConditionalOnClass 当前 classpath 可以找到某个类型的类时<br>@ConditionalOnMissingClass 当前 classpath 不可以找到某个类型的类时<br>@ConditionalOnResource 当前 classpath 是否存在某个资源文件<br>@ConditionalOnProperty 当前 jvm 是否包含某个系统属性为某个值<br>@ConditionalOnWebApplication 当前 spring context 是否是 web 应用程序
Actuator
Spring Boot CLI
注解
@Enable spring3.1
@EnableScheduling<br>
@EnableCaching
@SpringBootApplication
@EnableAutoConfiguration
@AutoConfigurationPackage<br>
@Import({Registrar.class})<br>
Registrar
ImportBeanDefinitionRegistrar.registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry)<br>
@Import({AutoConfigurationImportSelector.class})
AutoConfigurationImportSelector.selectImports()
this.getAutoConfigurationMetadata()<br>
AutoConfigurationMetadataLoader.loadMetadata()<br>
元数据META-INF/spring-autoconfigure-metadata.properties
条件注入 ConditionalOnClass
AutoConfigurationImportSelector.selectImports(AnnotationMetadata annotationMetadata)<br>
this.getAutoConfigurationEntry(annotationMetadata)
org.springframework.core.io.support.SpringFactoriesLoader#loadSpringFactories<br><br>this.getCandidateConfigurations(annotationMetadata, attributes);<br>SpringFactoriesLoader.loadFactoryNames()<br>(List)loadSpringFactories()<br>
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<br>
spring-boot-starter-web
spring-boot-starter-jdbc
spring-boot-starter-test
自定义starter组件
简单demo展示
真实starter展示
0 条评论
下一页