springboot的starter的作用就是自动装配。将配置类自动装配好放入ioc容器里。作为一个组件,提供给springboot的程序使用。
今天手写一个starter。写一个dog类,有个bark方法,能叫唤出自己的名字。
建一个普通的maven工程,引入springboot依赖
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
类定义如下:
public class Dog {
private String name;
private String color;
public String bark(){
System.out.println("My name is :"+name);
return "My name is :"+name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
Dog定义好以后,要把它注册到spring容器中。建一个configuration类。
@Configuration
public class DogAutoConfiguration {
@Bean
Dog dog (){
Dog dog = new Dog();
return dog;
}
}
bean注册到容器了,可是dog的属性还没有配置。为了能让用户自定义名字,建一个dogProperties
@ConfigurationProperties(prefix = "com.jesseyang")
public class DogProperties {
private String name;
private String color;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
更新 configuration类
@EnableConfigurationProperties(DogProperties.class)
@Configuration
public class DogAutoConfiguration {
@Bean
Dog dog (DogProperties dogProperties){
Dog dog = new Dog();
dog.setName(dogProperties.getName());
dog.setColor(dogProperties.getColor());
return dog;
}
}
为了让springboot容器扫描到configuration类,建一个resource目录,一个meta-inf文件夹和spring.factories文件
spring.factories
内容如下
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.jesseyang.configuration.DogAutoConfiguration
这样springboot启动的时候就能扫描到我们的configuration类,注入我们的dog
maven -install一下
新建一个springboot项目,引入我们的项目
<dependency>
<groupId>com.jesseyang</groupId>
<artifactId>starter-demo</artifactId>
<version>1.0</version>
</dependency>
application.properties里设置dog的名字
com.jesseyang.name="Jack"
测试一下
@SpringBootApplication
@RestController
public class DemoApplication {
@Autowired
Dog dog;
@RequestMapping("dog")
public String bark(){
return dog.bark();
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
访问dog接口
image.png
我们自己的starter就完成了
网友评论