SpringBootstarter原理SpringBoot将常用的开发功能划分为starter,这样我们开发功能的时候只需要引入对应的starter,而不用再介绍了一堆依赖!starter可以理解为一个依赖组,其主要功能是完成依赖的引入和初始配置。Spring提供的starter命名约定为spring-boot-starter-xxx,第三方提供的starter命名约定为xxx-spring-boot-starter。这里我们使用RocketMQ的依赖rocketmq-spring-boot-starter来学习starter的原理。在项目中引入rocketmq-spring-boot-starter之后,实际上引入了rocketmq的一些相关依赖。rocketmq-spring-boot中有一个自动装配类RocketMQAutoConfiguration。我截取了一小段代码来看一下。@Configuration@EnableConfigurationProperties(RocketMQProperties.class)@ConditionalOnClass({MQAdmin.class})@ConditionalOnProperty(prefix="rocketmq",value="name-server",matchIfMissing=true)@Import({MessageConverterConfiguration.class,ListenerContainerConfiguration.class,ExtProducerResetConfiguration.class,RocketMQTransactionConfiguration.class})@AutoConfigureAfter({MessageConverterConfiguration.class})@AutoConfigureBefore({RocketMQTransactionConfiguration.class})publicclassRocketMQAutoConfiguration{privatestaticfinalLoggerlog=LoggerFactory.getLogger(RocketMQAutoConfiguration.class);publicstaticfinalStringROCKETMQ_TEMPLATE_DEFAULT_GLOBAL_NAME="rocketMQTemplate";@AutowiredprivateEnvironmentenvironment;@Bean(destroyMethod="destroy")@ConditionalOnBean(DefaultMQProducer.class)@ConditionalOnMissingBean(name=ROCKETMQ_TEMPLATE_DEFAULT_GLOBAL_NAME)publicRocketMQTemplaterocketMQTemplate(DefaultMQProducerqProducer,RocketMQMessageConverterrocketMQMessageConverter){RocketMQTemplaterocketMQTemplate=newRocketMQTemplate();rocketMQTemplate.setProducer(mqProducer);rocketMQTemplate.setMessageConverter(rocketMQMessageConverter.getMessageConverter());returnrocketMQTemplate;}}@Configuration说明这是一个配置类,类中被@Bean注解了的方法,是spring的一个bean,比如rocketMQTemplate@EnableConfigurationProperties,它启用了@ConfigurationProperties这个bean,这里介绍RocketMQProperties。RocketMQProperties是yml文件中需要写入的属性。@ConfigurationProperties(prefix="rocketmq")publicclassRocketMQProperties{privateStringnameServer;privateStringaccessChannel;privateProducerproducer;privateConsumerconsumer=newConsumer();}SpringBoot项目启动时,默认只扫描下级目录下有@Configuration注解的类,所以这篇文章提到RocketMQAutoConfiguration如何扫描?其实在项目启动的时候,会加载项目中所有的spring.factories文件,然后加载相应的配置类,所以我们只需要在spring.factories中指定需要扫描的类即可。原理清楚了,接下来我们就简单的实现自己的starter吧!这个启动器的主要功能是在一个对象的末尾拼接一个字符串!1、新建一个项目,新建一个项目,名称为javatip-spring-boot-starter,并引入如下依赖
