ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
案例源码:https://gitee.com/flymini/codes03/tree/master/learn-boot-starter **** 下面自定义的场景启动器功能:直接调用场景启动器中 RobotService 提供的方法。 [TOC] # 1. 自定义场景启动器 **1. 场景启动器命名规范** ``` ------------ 官方命名空间 ------------ 前缀:spring-boot-starter 模式:spring-boot-starter-模块名 举例:spring-boot-starter-web、spring-boot-starter-jdbc ------------ 自定义命名空间 ------------ 后缀:spring-boot-starter 模式:模块名-spring-boot-starter 举例:mybatis-spring-boot-starter ``` **2. 引入下面两个坐标** ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- 编写配置文件时提供提示--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> ``` **3. 编写 Properties 类** ```java @ConfigurationProperties(prefix = "robot.config") public class RobotProperties { private String name; private Integer age; private boolean enable = false; //必须提供Getter和Setter方法 } ``` **4. 编写一个业务类观看效果** ```java public class RobotService { private RobotProperties robotProperties; public RobotService() { } public RobotService(RobotProperties robotProperties) { this.robotProperties = robotProperties; } public String getRobot() { return "{name=" + robotProperties.getName() + ", age=" + robotProperties.getAge() + "}"; } } ``` **5. 自定义自动配置类** ```java //将RobotAutoConfiguration注册到IoC @AutoConfiguration //将RobotProperties注册到IoC @EnableConfigurationProperties(RobotProperties.class) //当配置文件中robot.config.enable=true时才将RobotAutoConfiguration注册到IoC @ConditionalOnProperty(prefix = "robot.config", name = "enable", havingValue = "true") public class RobotAutoConfiguration { @Bean("robotService") //当IoC容器中还没注册名为robotService组件时才注册RobotService @ConditionalOnMissingBean(name = "robotService") public RobotService robotService(RobotProperties properties) { return new RobotService(properties); } } ``` **6. 创建文件org.springframework.boot.autoconfigure.AutoConfiguration.imports** 要想自动配置类生效还需要将其编写到该文件中。 *resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports* ``` accu.note.record.robot.RobotAutoConfiguration ``` 如果有多个配置类换行添加即可。 <br/> # 2. 测试场景启动器 **1. 建一个测试项目并引入上面自定义的场景启动器坐标** ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 自定义的场景启动器 --> <dependency> <groupId>accu.note.record</groupId> <artifactId>robot-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> ``` **2. 编写配置** *application.yml* ```yml robot: config: name: 张三 age: 25 enable: true ``` **3. 调用场景启动器定义的业务类 RobotService** ```java @RestController public class DemoController { @Autowired private RobotService robotService; @GetMapping("/demo/getRobot") public String getRobot() { return robotService.getRobot(); } } ``` 访问后得到结果为:`{name=张三, age=25}`。 <br/> 如此说明这个场景启动器就定义好了,他自动配置了 RobotService,我们直接调用就可以了。