当前位置: 首页 > wzjs >正文

html个人主页长沙seo网站优化

html个人主页,长沙seo网站优化,建网,对外宣传网站建设方案目录 1.Spring Boot 入门 1.1Spring Boot 简介(脚手架) 1.2微服务 1.3环境准备 1.3.1MAVEN设置 1.3.2IDEA设置 1.3.3Spring Boot HelloWorld 1.3.4Hello World探究 1.3.5主程序类,主入口类 1.4使用Spring Initializer快速创建Spring Bo…

目录

1.Spring Boot 入门

1.1Spring Boot 简介(脚手架)

1.2微服务

 1.3环境准备

 1.3.1MAVEN设置

1.3.2IDEA设置

1.3.3Spring Boot HelloWorld

1.3.4Hello World探究

 1.3.5主程序类,主入口类

1.4使用Spring Initializer快速创建Spring Boot项目

2.配置文件

2.1Springboot的热部署

2.2配置文件

2.3YAML语法

2.4配置文件值注入

2.4.1配置文件注入值数据校验

2.4.2@PropertySource&@ImportResource&@Bean

2.5配置文件占位符

2.6Profile

2.7配置文件加载位置

2.8外部配置加载顺序

2.9自动配置原理

2.9.1自动配置原理

2.9.2细节


1.Spring Boot 入门

1.1Spring Boot 简介(脚手架)

简化Spring应用开发的一个框架;

整个Spring技术栈的一个大整合;

J2EE开发的一站式解决方案;

优点:快速创建独立运行的spring项目以及与主流框架集成

使用嵌入式的Servlet容器,应用无需打成war包,内嵌Tomcat

Starters自动依赖和版本控制

大量的自动装配,简化开发,也可以修改默认值

无需配置XML无代码生成开箱即用

准生产环境的运行时应用监控

与云计算的天然集成

1.2微服务

        Spring Cloud微服务治理方案

2014martin fowler

Servlet,ssh,ssm,单体,SOA,springCloud

微服务:架构风格(服务微化)

        微服务是指开发单个小型的但有业务功能的服务,每个服务都有自己处理和轻量通讯机制,可以部署在单个或多个服务器上。微服务也指一种种松耦合的有一定的有界上下文的面向服务架构。

一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;

单体应用:ALL IN ONE

微服务:每一个功能元素最终都是一个可独立替换和独立升级的软件单元;

微服务文档https://martinfowler.com/articles/microservices.html#MicroservicesAndSoa

  1. 微服务优点:
    1.         每一个微服务都很小,这样能聚焦一个指定的业务功能或业务需求。
      1.         微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成。
        1.         微服务是松耦合的,是有功能意义的服务,无论是开发阶段或是部署阶段都是独立的。
          1.         微服务能够使用不同的语言开发。
            1.         微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,一个团队的新成员能够更快投入生产。
              1.         微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果,
                1.         微服务能够即时被要求扩展。
                  1.         微服务能够部署中低端配置的服务。
                    1.         易于和第三方集成。
                      1.         每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库。
  2. 微服务缺点:
  3.         微服务架构可能带来过多的操作
  4.         可能双倍的努力
  5.         分布式系统可能复杂难以管理
  6.         因为分布部署跟踪问题难
  7.         当服务量增加,管理复杂性增加

 1.3环境准备

  1. 环境约束
  2.         –jdk1.8:Spring Boot 推荐jdk1.7及以上;java version "1.8.0_112"
  3.         –maven3.x:maven 3.3以上版本;Apache Maven 3.3.9
  4.         –IntelliJIDEA2017:IntelliJ IDEA 2017.3.3 x64、STS
  5.         –SpringBoot 2.0.2.RELEASE:统一环境; spring5
  6.         不要求版本   单一springboot项目   版本冲突
  7.         SpringCloud微服务治理的时候    

 1.3.1MAVEN设置

        给maven settings.xml配置文件的profiles标签添加

<profile>
<id>jdk‐1.8</id>
<activation><activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>

1.3.2IDEA设置

1.3.3Spring Boot HelloWorld

(maven项目改变成springboot项目)

        浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串;

1.创建一个maven工程;(jar

2.导入spring boot相关的依赖

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐web</artifactId>
</dependency>
</dependencies>

3.编写一个主程序;启动Spring Boot应用

/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {public static void main(String[] args) {// Spring应用启动起来SpringApplication.run(HelloWorldMainApplication.class,args);}
}

4.编写相关的ControllerService

@Controller
public class HelloController {@ResponseBody@RequestMapping("/hello")public String hello(){return "Hello World!";}
}

5.运行主程序测试

6.简化部署

<!‐‐ 这个插件,可以将应用打包成一个可执行的jar包;‐‐>
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐maven‐plugin</artifactId></plugin></plugins>
</build>

        将这个应用打成jar包,直接使用java -jar的命令进行执行;

1.3.4Hello World探究

        POM文件

1.父项目

<parent><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐parent</artifactId><version>1.5.9.RELEASE</version>
</parent>
他的父项目是
<parent><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐dependencies</artifactId><version>1.5.9.RELEASE</version><relativePath>../../spring‐boot‐dependencies</relativePath>
</parent>
他来真正管理Spring Boot应用里面的所有依赖版本;
Spring Boot的版本仲裁中心;
以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖自然需要声明版本号)

2.启动器

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐web</artifactId>
</dependency>

spring-boot-starter-web

spring-boot-starter:spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件;

Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter

相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器

 1.3.5主程序类,主入口类

/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {public static void main(String[] args) {// Spring应用启动起来SpringApplication.run(HelloWorldMainApplication.class,args);}
}

1.@SpringBootApplication:

Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot

就应该运行这个类的main方法来启动SpringBoot应用;

@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 {

 2.@SpringBootConfiguration:Spring Boot的配置类;

3.标注在某个类上,表示这是一个Spring Boot的配置类;

4.@Configuration:配置类上来标注这个注解;

5.配置类 ----- 配置文件;配置类也是容器中的一个组件;@Component

6.@EnableAutoConfiguration:开启自动配置功能;

7.以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样自动配置才能生效;

@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

8.@AutoConfigurationPackage:自动配置包

9.@Import(AutoConfigurationPackages.Registrar.class)

10.Spring的底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackages.Registrar.class将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;

11.@Import(EnableAutoConfigurationImportSelector.class)

12.给容器中导入组件?EnableAutoConfigurationImportSelector:导入哪些组件的选择器;

13.将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件。

14.并配置好这些组件;

有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader)

Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东西,自动配置类都帮我们;

J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar

1.4使用Spring Initializer快速创建Spring Boot项目

IDEA:使用 Spring Initializer快速创建项目

IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目;

选择我们需要的模块;向导会联网创建Spring Boot项目;

默认生成的Spring Boot项目;

主程序已经生成好了,我们只需要我们自己的逻辑

resources文件夹中目录结构

static:保存所有的静态资源; js css images

templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarkerthymeleaf);

application.propertiesSpring Boot应用的配置文件;可以修改一些默认设置;

2.配置文件

2.1Springboot的热部署

        spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

        引入依赖

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> 
</dependency>

        修改java代码或者配置文件模板后可以通过ctrl+f9来实施热部署。

2.2配置文件

SpringBoot使用一个全局的配置文件,配置文件名是固定的;

        •application.properties

        •application.yml

配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;

YAMLYAML Ain't Markup Language

YAML A Markup Language:是一个标记语言

YAML isn't Markup Language:不是一个标记语言;

标记语言:

以前的配置文件;大多都使用的是 xxxx.xml文件;

YAML:以数据为中心,比jsonxml等更适合做配置文件;

2.3YAML语法

1.基本语法

2.k:(空格)v:表示一对键值对(空格必须有);

3.以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

 属性和值也是大小写敏感;

4.值的写法

        字面量:普通的值(数字,字符串,布尔)

        k: v:字面直接来写;

        字符串默认不用加上单引号或者双引号;

        "":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

        name: "zhangsan \n lisi":输出;zhangsan 换行 lisi

        '':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

        name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

5.对象、Map(属性和值)(键值对):

6.k: v:在下一行来写对象的属性和值的关系;注意缩进

7.对象还是k: v的方式

数组(ListSet):

- 值表示数组中的一个元素

 行内写法

2.4配置文件值注入

        我们可以导入配置文件处理器,以后编写配置就有提示了 

<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐configuration‐processor</artifactId><optional>true</optional>
</dependency>

1.properties配置文件在idea中默认utf-8可能会乱码

 2. @Value获取值和@ConfigurationProperties获取值比较

配置文件yml还是properties他们都能获取到值;

如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value

如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties

2.4.1配置文件注入值数据校验

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {/*** <bean class="Person">* <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>* <bean/>*///lastName必须是邮箱格式@Email//@Value("${person.last‐name}")private String lastName;//@Value("#{11*2}")private Integer age;//@Value("true")private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Dog dog;

2.4.2@PropertySource&@ImportResource&@Bean

        @PropertySource:加载指定的配置文件;

/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
* *
只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
* @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;
* */
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person {
/**
* <bean class="Person">
* <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#
{SpEL}"></property>
* <bean/>
*/
//lastName必须是邮箱格式
// @Email
//@Value("${person.last‐name}")
private String lastName;
//@Value("#{11*2}")
private Integer age;
//@Value("true")
private Boolean boss;

        @ImportResource:

        导入Spring的配置文件,让配置文件里面的内容生效;

        Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;

        想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上

SpringBoot推荐给容器中添加组件的方式;推荐使用全注解的方式

1、配置类@Configuration------>Spring配置文件

2、使用@Bean给容器中添加组件

/**
* @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
*
* 在配置文件中用<bean><bean/>标签添加组件
* */
@Configuration
public class MyAppConfig {//将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名@Beanpublic HelloService helloService02(){System.out.println("配置类@Bean给容器中添加组件了...");return new HelloService();}
}

2.5配置文件占位符

1.随机数

${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int[1024,65536]}

2.占位符获取之前配置的值,如果没有可以是用:指定默认值

person.last‐name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15

2.6Profile

1、多Profile文件

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml

默认使用application.properties的配置;

2yml支持多文档块方式

3、激活指定profile

  1. 在配置文件中指定 spring.profiles.active=dev
  2. 命令行:
  3. java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
  4. 可以直接在测试的时候,配置传入命令行参数
  5. 虚拟机参数;
  6. -Dspring.profiles.active=dev

2.7配置文件加载位置

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

–file:./config/

–file:./

–classpath:/config/

–classpath:/

优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载主配置文件;互补配置;

-classpath:/的application.properties.中加入

server.servlet.context-path=/boot3访问根目录

2.8外部配置加载顺序

配置加载顺序

SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置

1.命令行参数

所有的配置都可以在命令行上进行指定

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=C:/appliction.properties

多个配置用空格分开; --配置项=

2.来自java:comp/envJNDI属性

3.Java系统属性(System.getProperties()

4.操作系统环境变量

5.RandomValuePropertySource配置的random.*属性值

jar包外向jar包内进行寻找;

优先加载带profile

6.jar包外部的application-{profile}.propertiesapplication.yml(spring.profile)配置文件

7.jar包内部的application-{profile}.propertiesapplication.yml(spring.profile)配置文件

再来加载不带profile

8.jar包外部的application.propertiesapplication.yml(不带spring.profile)配置文件

9.jar包内部的application.propertiesapplication.yml(不带spring.profile)配置文件

10.@Configuration注解类上的@PropertySource

11.通过SpringApplication.setDefaultProperties指定的默认属性

所有支持的配置加载来源;

资料参考

https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#boot-features-external-config

2.9自动配置原理

配置文件到底能写什么?怎么写?自动配置原理;

https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#common-application-properties

2.9.1自动配置原理

  1. SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration
  2. @EnableAutoConfiguration 作用:
  3. 利用EnableAutoConfigurationImportSelector给容器中导入一些组件?
  4. 可以查看selectImports()方法的内容;
  5. List configurations = getCandidateConfigurations(annotationMetadata, attributes);获取候选的配置
SpringFactoriesLoader.loadFactoryNames()
扫描所有jar包类路径下 META‐INF/spring.factories
把扫描到的这些文件的内容包装成properties对象
从properties中获取到EnableAutoConfiguration.class类(类名)对应的值,然后把他们添加在容器中

将类路径下 META-INF/spring.factories 里面配置的所有EnableAutoConfiguration的值加入到了容器中;

# 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,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,
\ o
rg.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration
,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration
,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfi
guration,\
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,\
org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\
org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\
org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\
org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\
org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.DeviceDelegatingViewResolverAutoConfiguration,
\ o
rg.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration,\
org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration,\
org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\
org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\
org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration,\
org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration,\
org.springframework.boot.autoconfigure.social.LinkedInAutoConfiguration,\
org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration,\
org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\
org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\
org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration,\
org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,\
org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration,\
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguratio

每一个这样的 xxxAutoConfiguration类都是容器中的一个组件,都加入到容器中;用他们来做自动配置;

3. 每一个自动配置类进行自动配置功能;

4. HttpEncodingAutoConfigurationHttp编码自动配置)为例解释自动配置原理;

@Configuration //表示这是一个配置类,以前编写的配置文件一样,也可以给容器中添加组件
@EnableConfigurationProperties(HttpEncodingProperties.class) //启动指定类的ConfigurationProperties功能;将配置文件中对应的值和HttpEncodingProperties绑定起来;并把
HttpEncodingProperties加入到ioc容器中
@ConditionalOnWebApplication //Spring底层@Conditional注解(Spring注解版),根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效; 判断当前应用是否是web应用,如果是,当前配置类生效
@ConditionalOnClass(CharacterEncodingFilter.class) //判断当前项目有没有这个类CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器;
@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing =true) //判断配置文件中是否存在某个配置 spring.http.encoding.enabled;如果不存在,判断也是成立的//即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的;
public class HttpEncodingAutoConfiguration {//他已经和SpringBoot的配置文件映射了private final HttpEncodingProperties properties;//只有一个有参构造器的情况下,参数的值就会从容器中拿public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {this.properties = properties;}@Bean //给容器中添加一个组件,这个组件的某些值需要从properties中获取
@ConditionalOnMissingBean(CharacterEncodingFilter.class) //判断容器没有这个组件?
public CharacterEncodingFilter characterEncodingFilter() {CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();filter.setEncoding(this.properties.getCharset().name());filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));return filter;
}

根据当前不同的条件判断,决定这个配置类是否生效?

一但这个配置类生效;这个配置类就会给容器中添加各种组件;这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;

5. 所有在配置文件中能配置的属性都是在xxxxProperties类中封装者;配置文件能配置什么就可以参照某个功能对应的这个属性类

@ConfigurationProperties(prefix = "spring.http.encoding") //从配置文件中获取指定的值和bean的属性进行绑定
public class HttpEncodingProperties {
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF‐8");

精髓:

1)、SpringBoot启动会加载大量的自动配置类

2)、我们看我们需要的功能有没有SpringBoot默认写好的自动配置类;

3)、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件有,我们就不需要再来配置了)

4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值;

xxxxAutoConfigurartion:自动配置类;

给容器中添加组件

2.9.2细节

1.@Conditional派生注解(Spring注解版原生的@Conditional作用)

作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置里面的所内容才生效;

@Conditional扩展注解

作用(判断是否满足当前指定条件)

@ConditionalOnJava

系统的java版本是否符合要求

@ConditionalOnBean

容器中存在指定Bean

@ConditionalOnMissingBean

容器中不存在指定Bean

@ConditionalOnExpression

满足SpEL表达式指定

@ConditionalOnClass

系统中有指定的类

@ConditionalOnMissingClass

系统中没有指定的类

@ConditionalOnSingleCandidate

容器中只有一个指定的Bean,或者这个Bean是首选Bean

@ConditionalOnProperty

系统中指定的属性是否有指定的值

@ConditionalOnResource

类路径下是否存在指定资源文件

@ConditionalOnWebApplication

当前是web环境

@ConditionalOnNotWebApplication

当前不是web环境

@ConditionalOnJndi

JNDI存在指定项

        自动配置类必须在一定的条件下才能生效;

        我们怎么知道哪些自动配置类生效;

        我们可以通过启用 debug=true属性;来让控制台打印自动配置报告,这样我们就可以很方便的知道哪些自动配置

        类生效;

========================
AUTO‐CONFIGURATION REPORT
=========================
Positive matches:(自动配置类启用的)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
DispatcherServletAutoConfiguration matched:
‐ @ConditionalOnClass found required class
'org.springframework.web.servlet.DispatcherServlet'; @ConditionalOnMissingClass did not find
unwanted class (OnClassCondition)
‐ @ConditionalOnWebApplication (required) found StandardServletEnvironment
(OnWebApplicationCondition)
Negative matches:(没有启动,没有匹配成功的自动配置类)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
ActiveMQAutoConfiguration:
Did not match:
‐ @ConditionalOnClass did not find required classes 'javax.jms.ConnectionFactory',
'org.apache.activemq.ActiveMQConnectionFactory' (OnClassCondition)
AopAutoConfiguration:
Did not match:
‐ @ConditionalOnClass did not find required classes
'org.aspectj.lang.annotation.Aspect', 'org.aspectj.lang.reflect.Advice' (OnClassCondition)
http://www.dtcms.com/wzjs/144595.html

相关文章:

  • 个人公司网站建设答辩seo诊断专家
  • 做足球推荐网站能赚钱吗长春关键词搜索排名
  • 网站的竞价怎么做狼雨的seo教程
  • 北京大型网站建设台州seo网站排名优化
  • fireworks做网站seo推广方案怎么做
  • 梁溪区住房和城乡建设局网站在线葡京在线葡京
  • 展示型网站企业网站建设惠州网站营销推广
  • 人人建站网东莞营销外包公司
  • 木鱼的网站广告公司
  • 南靖网站建设南昌seo排名收费
  • 官方网站怎么推广关键词推广和定向推广
  • 哪些网站可以做免费答题关键词优化排名软件怎么样
  • 做金融网站违法吗电脑上突然出现windows优化大师
  • 毕设做系统与网站长沙靠谱seo优化费用
  • 中国建设银行网站怎么解绑设备seo是什么意思如何实现
  • 怎么0成本做网站网络链接推广
  • 网站建设的售后保健品的营销及推广方案
  • 常州网页百度提升优化
  • 海南做网站公司深圳外贸网站建设
  • 推荐一些可以做笔试题的网站客户管理系统
  • 可以做专利聚类分析的免费网站网络软文写作
  • web前端工程师是什么键词优化排名
  • b2c 网站 方案网站策划是什么
  • 正规网站建设咨询电话广告软文是什么意思
  • 潍坊网站建设方案外包百度信息流推广
  • 学校网站构建百度关键词多少钱一个月
  • 深圳 建设银行国际互联网站免费推广方式都有哪些
  • 网站做跳转微信打开网站推广渠道
  • 网站更换主机注意阿里巴巴国际贸易网站
  • 大麦网网站建设的功能定位百度获客平台