最近在学习springBoot,学到启动器如何启动原理和如何自定制启动器,记录一下:
1.首先,创建空工程。
点finish.ok
2,创建两个子模块:注意上一步点完完成之后,自己弹出的新增模块要关掉,重新从file下面点。
这里先创建一个maven模块,作为依赖。
这里,命名方式我已starter结尾的,说明这是一个starter。
接下来创建自动配置模块。
注意导入web
3.以上模块都创建好之后:是如下这个样子滴:
cardemo是最后创建的。这一步可忽略掉。
4.两个模块创建好之后,在depen-starter的pom中导入这一段依赖。其中depen-starter的其他依赖都可删除,不需要,test和自动部署的包。
<dependency>
<groupId>com.yuxin</groupId>
<artifactId>autoconfig</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
autoconfig模块的pom文件还需要导入
这是所有启动器的基础配置。
接下来就是autoconfig模块:添加三个类文件:
CarProperties文件:
@ConfigurationProperties(prefix = "car.properties")//注解读取配置文件的属性和java实体类做映射,properties文件需要配置以car.properties开头的两个属性,car.properties.name和car.properties.age
public class CarProperties {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
CarService文件:
public class CarService {
private CarProperties carProperties;
public CarProperties getCarProperties() {
return carProperties;
}
public void setCarProperties(CarProperties carProperties) {
this.carProperties = carProperties;
}
public String mycar(){
return "mycar is:"+carProperties.getName()+" and age:"+carProperties.getAge();
}
}
CarAutoConfigurer文件:
@Configuration//表明这是一个配置类
@ConditionalOnWebApplication//判断是web环境下才生效
@EnableConfigurationProperties(CarProperties.class)//这个注解表明使配置类生效
public class CarAutoConfigurer {
@Autowired
private CarProperties carProperties;
@Bean//加入到容器中
public CarService carService(){
CarService car = new CarService();
car.setCarProperties(carProperties);//设置属性的值
return car;
}
}
要想使自动配置类生效还需要在spring.factories中配置,
在resources下创建META-INF文件夹下,新增spring.factories文件,右边配置写进入。这样就让spring-boot启动时,自动去寻找所有包内的spring.factories文件,然后得出一个全类名的list,然后遍历这个list去创建bean。
到此,自动配置类就算是写好了。
5.创建测试模块,名字叫cardemo,步骤和上面一样。
首先在pom中导入刚才我们自定制的启动器依赖
<!--引入自定义的启动器-->
<dependency>
<groupId>com.yuxin</groupId>
<artifactId>depen-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
创建包controller和类CarController,CarController文件:
@RestController
public class CarController {
@Autowired
CarService carService;
@GetMapping("/mycar")
public String myCar(){
return "我的车是:"+carService.mycar();
}
}
在application.properties中增加像上面一样的配置。
接下来就启动主应用程序。在浏览器中访问,输出如下:表明自动配置类生效。
时间急促,如有不当,欢迎指正。