Primavera de arranque Marco Introducción

Ahora convertido en un pleno desarrollo pila Android, armar la siguiente información sobre el arranque de primavera:

ventaja de arranque de un marco de Primavera

① genes buenos

Debido SpringBoot se acompaña de Spring 4.0 nacido, arranque el arranque es el significado, que es, de hecho, su papel es el de ayuda a los desarrolladores crear rápidamente marco de Primavera, Primavera SpringBoot heredó buenos genes, para desarrollar más conveniente en la primavera rápido.

② simplificar la codificación

, Tales como queremos crear un proyecto web con los amigos de la primavera, todos sabemos que cuando se utiliza la primavera, es necesario agregar más dependientes del archivo pom, y la primavera de arranque ayudará a desarrollar un rápido inicio de un contenedor web, en el arranque de la primavera sólo tenemos que añadir al arranque basados ​​en la web en el fichero POM.

③ simplificada de configuración

Aunque el marco de Primavera para Java EE ligero, pero debido a su configuración engorroso, una vez fue considerado un "infierno de configuración." Una variedad de XML, la configuración de anotación será deslumbrante, y múltiple de configuración, y si un error es difícil de averiguar por qué. Primavera de arranque más es el uso de la forma en que Java configuración para la configuración de la primavera.

④ simplificar el despliegue

Cuando se utiliza la primavera, cuando tenemos que desplegar Tomcat implementación del proyecto en el servidor, entonces el artículo etiquetado como paquete de guerra lanzado en el gato, después de usar la primavera de arranque, no necesitamos ir hasta el despliegue en el servidor Tomcat porque la primavera de arranque integrados Tomcat sólo tenemos que la etiqueta del paquete de proyectos frasco, utilizando el botón java-jar un xxx.jar para iniciar el proyecto.

Además, para reducir los requisitos básicos del entorno operativo, la variable de entorno en el JDK puede.

⑤ monitoreo simplificar

Podemos introducir la primavera-boot-start-actuador dependen directamente usando manera REST para obtener los parámetros de rendimiento en tiempo de ejecución del proceso, a fin de lograr el propósito de monitorear, más conveniente. Pero la primavera de arranque es sólo un marco micro no proporciona un descubrimiento de servicios y el registro de funciones de apoyo, no hay ningún programa de control integrado periférica, no hay soluciones de gestión de seguridad perimetral, por lo que la arquitectura de micro-servicio, se utiliza junto Nube, Primavera, también tienen que coincidir.

El flujo principal de ejecución de dos primavera de arranque

En primer lugar, un nuevo objeto es SpringApplication
realiza durante el método de la SpingApplication objeto

   1. 新建一个SpringApplication对象

Get webApplicationType tipo, cuando el paquete guerra springboot como una aplicación de envasado, este tipo de servlet
inyección ApplicationContextInitializer inicializador
ApplicationListener oyente dispuesto

   2. 执行对象的run方法,

Crear un nuevo cronómetro, y empezar a monitorizar el tiempo de ejecución del programa
para obtener SpringApplicationRunListeners objetos, e iniciar el oyente
pasado, de acuerdo con los parámetros de inicio args, objetos nueva ApplicationArguments
Nueva ConfigurableEnvironment tipo de objeto específico StandardServletEnvironment, se cargará en su proceso de creación application.properties perfil springboot, mientras que el programa SpringApplication en su obligado
para crear ConfigurableApplicationContext el contexto del objeto, y las propiedades de entorno conjunto de objetos, que atraviesan ApplicationContextInitializer se inicializa el objeto,
obtener BeanFactory applicationArguments individuales registrado a través del objeto de contexto de
contexto de ejecución de refresco de operativo

Principio de la configuración automática de tres primavera de arranque

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {SpringApplication.run(MyApplication .class, args);}
}

Vemos, clase MyApplication como la entrada, la clase de entrada tiene un método principal, que es en realidad un método de entrada estándar para aplicaciones Java, que se utilizan normalmente en el principal SpringApplication.run () para iniciar la aplicación completa. Vale la pena señalar que la clase de entrada a la anotación uso @SpringBootApplication declara que es el núcleo de SpringBoot comentario.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
    // 略
}

Esta anotación en el interior, lo más importante es @EnableAutoConfiguration, nombre tan sencillo, a ver que es para abrir la configuración automática, SpringBoot comienzan a aparecer, tan silenciosamente en la fuente de @EnableAutoConfiguration.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
    // 略
}

Se puede ver en las notas a @EnableAutoConfiguration @import anotación configuración finalización de importación, y se utiliza dentro de EnableAutoConfigurationImportSelector SpringFactoriesLoader.loadFactoryNames método tarro exploraciones paquete con META-INF / archivo spring.factories. Aquí es 1.5.8.RELEASE fuente de lograr:

 @Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
    if (!isEnabled(annotationMetadata)) {
        return NO_IMPORTS;
    }
    try {
          AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
                    .loadMetadata(this.beanClassLoader);
          AnnotationAttributes attributes = getAttributes(annotationMetadata);
          //扫描具有META-INF/spring.factories文件的jar包
          List<String> configurations = getCandidateConfigurations(annotationMetadata,
                    attributes);
          //去重
          configurations = removeDuplicates(configurations);
          //排序
          configurations = sort(configurations, autoConfigurationMetadata);
           //删除需要排除的类
         Set<String> exclusions = getExclusions(annotationMetadata, attributes);
         checkExcludedClasses(configurations, exclusions);
         configurations.removeAll(exclusions);
         configurations = filter(configurations, autoConfigurationMetadata);
         fireAutoConfigurationImportEvents(configurations, exclusions);
         return configurations.toArray(new String[configurations.size()]);
    }
    catch (IOException ex) {
        throw new IllegalStateException(ex);
    }
}
//加载spring.factories实现
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata,
        AnnotationAttributes attributes) {
    List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
            getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
    Assert.notEmpty(configurations,
            "No auto configuration classes found in META-INF/spring.factories. If you "
                      + "are using a custom packaging, make sure that file is correct.");
    return configurations;
}

Springboot cualquier aplicación que introducir springboot-autoconfiguración, y el archivo spring.factories en el paquete a continuación. spring.factories documento se presenta en forma Clave = Valor, Valor cuando una pluralidad de espacio, definido en esta información del archivo de inicialización, el monitor o similar, de manera que la verdadera clave está en efecto configura automáticamente org.springframework.boot.autoconfigure.EnableAutoConfiguration como sigue:

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
//省略

Hay muchos código de configuración automática que antes no hicimos uso de la configuración de los comentarios:
@Configuration: Esta configuración no haría más que explicar, hemos estado utilizando
@EnableConfigurationProperties: Este es un comentario abierta utilizando los parámetros de configuración, el valor es el valor de nuestra entidad configuración asignación de parámetros ClassType, entidad configuración como una fuente de configuración.
La siguiente condición se construye anotación SpringBoot:
@ConditionalOnBean: recipiente SpringIoc cuando existe la condición especificada en el Bean
@ConditionalOnClass: recipiente SpringIoc cuando existe la condición especificada en la Clase
@ConditionalOnExpression: expresión SpEL tal como se determina en base a la condición
@ConditionalOnJava: una condición de determinación basada en la versión de la JVM
@ConditionalOnJndi: Encontrar la ubicación especificada en la presencia de JNDI
@ConditionalOnMissingBean: cuando ya no se designa recipiente de granos en condiciones SpringIoc
@ConditionalOnMissingClass: cuando ya no se designa en Clase SpringIoc las condiciones del contenedor
@ConditionalOnNotWebApplication: posición de condición actual no es un proyecto web
@ConditionalOnProperty: especifica si los atributos se especifican valor
@ConditionalOnResource: si la ruta de clases valor especificado
@ConditionalOnSingleCandidate: Al especificar sólo uno de cada contenedor SpringIoc Bean, o más, pero aunque no se designan preferido de la haba
@ConditionalOnWebApplication: el proyecto actual es una condiciones del proyecto Web
anteriores notas son meta-anotación @Conditional evolucionó, no de acuerdo con las condiciones condiciones específicas creadas por encima de las notas correspondientes.

Publicado 10 artículos originales · ganado elogios 8 · visitas 899

Supongo que te gusta

Origin blog.csdn.net/qq_44739668/article/details/104826807
Recomendado
Clasificación