目录
2、创建配置类,用于其他工程使用starter的时候,配置的数据信息
5、创建spring.factory文件在META-INF文件夹下(文件下手动创建)
Found multiple @SpringBootConfiguration annotated classes [Generic bean: ……
论述
1、首先starter也是一个springboot项目
2、我们完成这个项目,并将其打包到maven中,从而供其他项目工程的使用
实现
1、springboot在启动的时候,会先扫描到spring.factory文件,去创建该文件中的类并存储到ioc中,一般在该文件下都是AutoConfiguration自动配置类,在自动配置类中,将@bean注解的一系列的类注入到ioc容器中,再将AutoConfiguration注入到ioc中
2、在注入自动配置类之前,我们在AutoConfiguration上面导入了一个properties的类,配置信息类
总结:首先ioc先加载properties配置类,从application.yaml或者application.propties中去获取信息,使用无参构造并设置 (反射),再来加载AutoConfiguration类,但是加载此类先要加载完里面的@bean注解的方法,将其全部注入到ioc之后,再来注入AutoConfiguration,从而达到springboot的自动装配
自定义Starter
1、创建springboot - starter工程
2、创建配置类,用于其他工程使用starter的时候,配置的数据信息
@Data
@ConfigurationProperties(prefix = "mystarter")
public class MyStarterProperties {
private String name;
private String pass;
}
3、创建一个service,用于测试
public class MyStarterService {
private String name;
private String pass;
public MyStarterService(String name, String pass) {
this.name = name;
this.pass = pass;
}
public String doService(String value) {
return this.name + " -- " + value + " -- " + this.pass;
}
}
4、创建一个AutoConfig,用于自动配置
@Configuration
@ConditionalOnClass(MyStarterService.class)
@EnableConfigurationProperties(MyStarterProperties.class)
public class MyStarterAutoConfiguration {
@Resource
private MyStarterProperties properties;
@Bean
@ConditionalOnMissingBean // 确保单例模式
@ConditionalOnProperty(
prefix = "mystarter", // 前缀
value = "having", // 必须含有这个属性的配置才能注入
havingValue = "true" // 必须为true的时候才注入
)
public MyStarterService myStarterProperties() {
return new MyStarterService(properties.getName(), properties.getPass());
}
}
5、创建spring.factory文件在META-INF文件夹下(文件下手动创建)
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.jieyaao1212.config.MyStarterAutoConfiguration
6、打包并且将这个jar添加到maven中
setting ==> Project Structure……
打包完成之后,out目录下找到打成的jar
在cmd中运行
mvn install:install-file -DgroupId=com.jieyaao1212 -DartifactId=mystarter -Dversion=1.3.0 -Dpackaging=jar -Dfile=F:\idea-springboot\my-starter\out\artifacts\my_starter_jar\my-starter.jar
自己修改 groupId、artifactId、version、Dfile的jar地(你打包的地址)
注意,在打包完成之后,我们需要确定这个打包完成的位置是不是我们maven中的本地仓库位置,我的被我修改之后但是打包的位置没有任何的变化,手动复制粘贴到本地仓库中
测试starter项目
1、重新创建新的springboot工程
在新的项目中导入这个jar
2、直接在测试类中去测试
遇到的一些问题
Found multiple @SpringBootConfiguration annotated classes [Generic bean: ……
找不到启动类,在注解中去指定启动类即可