Crea un iniciador personalizado:
La aparición de Springboot simplifica enormemente la configuración de los desarrolladores, y una de las grandes herramientas es el iniciador de springboot, que es el componente central de springboot. El springboot oficial también encapsula varias comodidades para los desarrolladores. El módulo de inicio utilizado, por ejemplo:
- spring-boot-starter-web // primavera MVC 相关
- spring-boot-starter-aop // Aspectos relacionados con la programación
- spring-boot-starter-cache // Relacionado con la caché
(1) Requisitos de inicio personalizados: el
sitio web oficial requiere la creación de dos módulos, uno es un módulo de configuración automática y el otro es un módulo de inicio. El módulo de inicio depende del módulo de configuración automática, que sirve principalmente como una dependencia transitiva (se puede omitir ).
(2) Convención de nomenclatura: el
iniciador oficial spring-boot-starter-xxx
se nombra en el formato y el iniciador personalizado por desarrolladores externos xxxx-spring-boot-starter
se nombra en la regla.
1 Cree un módulo de configuración automática
Primero cree un proyecto vacío y luego cree un SpringBoot
módulo, elimine la clase de inicio y la clase de prueba en esta clase.
(1) Configuración de Pom
<dependencies>
<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>
</dependencies>
Solo estas dos dependencias se mantienen en el archivo pom, entre las cuales se spring-boot-starter
encuentran las dependencias básicas del lanzador, que spring-boot-configuration-processor
se pueden solicitar al configurar el archivo:
(2) Escribir configuración
package com.glp.properties;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "diy.hello")
public class Properties {
private String pre;
private String suf;
public String getPre() {
return pre;
}
public void setPre(String pre) {
this.pre = pre;
}
public String getSuf() {
return suf;
}
public void setSuf(String suf) {
this.suf = suf;
}
}
@ConfigurationProperties
: Esta clase de configuración está application.properties/application.yaml
asociada con el archivo de configuración en SpringBoot para la inyección de propiedades.
(3) Servicio de redacción
package com.glp.service;
import com.glp.properties.Properties;
public class HelloService {
Properties properties;
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public String sayHello(){
return properties.getPre()+"offer"+properties.getSuf();
}
}
(4) Configuración automática
Una integración del servicio y la clase de configuración en la clase de configuración automática es equivalente a pasar la clase configurada a la clase de servicio.
package com.glp.config;
import com.glp.properties.Properties;
import com.glp.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConditionalOnWebApplication
@EnableConfigurationProperties(Properties.class)
public class HelloServiceAutoConfiguration {
@Autowired
Properties properties;
@Bean
public HelloService getHelloService(){
HelloService service = new HelloService();
service.setProperties(properties);
return service;
}
}
@ConditionalOnXXXX
: Se utiliza para determinar si se cumplen determinadas condiciones y para determinar si la configuración automática entra en vigor@Bean
: Integre servicios y clases de configuración, configúrelos en componentes e inyéctelos en el contenedor para que los usuarios los llamen.@EnableConfigurationProperties
: Deje que xxxProperties surta efecto y agréguelo al contenedor
(5) fábricas de primavera
Escriba su propio META-INF
archivo Cuando el proyecto comience a escanear el paquete, la clase de configuración especificada en el archivo spring.factories se cargará automáticamente.
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.glp.config.HelloServiceAutoConfiguration
2 Cree un módulo de estado de inicio
Este módulo solo se usa para dependencias transitivas, por lo Maven
que nos basta con crear un nuevo módulo.
Solo falta introducir nuestra costumbre en el pom autoconfigure
, juega un papel dependiente. Por supuesto que si no quieresCódigo de configuración automático y gestión de dependencias Por separado, también puede utilizar un solo módulo.
<dependencies>
<dependency>
<groupId>com.glp</groupId>
<artifactId>diy-spring-boot-autoconfiguration</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
Nota: Para
introducir la clase de configuración automática, simplemente copie el groupId, artifactId y la versión de la clase de configuración automática pom.xml.
3 Instale el módulo de configuración automática y el módulo de inicio en el almacén de Maven
4 clases de prueba de escritura
Creemos una nueva SpringBoot
clase de prueba de módulo y simplemente introduzcamos el módulo web en la clase de prueba, sin introducir demasiado.
(1) Introduzca la dependencia en la clase de prueba:
<dependency>
<groupId>com.glp</groupId>
<artifactId>diy-spring-boot-stater</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
(2) Configuración de Applicantrion.properties
diy.hello.pre=where
diy.hello.suf=offer
(3) Escriba un controlador:
package com.glp.controller;
import com.glp.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired
HelloService helloService;
@GetMapping("/say")
public String helloController(){
return helloService.sayHello();
}
}
(4) Resultados de la operación