-
【PC软件】——开机动画工厂Boot&nbs…
2014-01-21 15:52:17Animation Factory" TITLE="【PC软件】——开机动画工厂Boot Animation Factory" /> 系统需求: Windows XP SP3 or later (Windows 7 is recommended) Microsoft.NET Framework 4 or later (Client Profile is ...系统需求:Windows XP SP3 or later (Windows 7 is recommended)Microsoft.NET Framework 4 or later (Client Profile is also needed)v1.4.0.0 [1.6.2012]-New features: flip and rotate boot animations-Added Export as GIF feature to the Preview from .zip and Preview from device menus-Added Creator settings under General tab: Use flip and rotate settings when saving animation-Added save settings notification-Changed the size of the main window and slightly tweaked the design of some panels-Bug fixes (Previewer auto-size now sizes the window correctly; probably fixed startup errors)-Added an option to either exit the program or continue with execution when an unexpected error happens下载: -
Spring Boot中注解使用工厂模式
2020-03-18 21:18:04目录Spring Boot中注解使用工厂模式问题原因解决办法1. 不使用@AutoWired注解,new一个factory2. 使用@PostConstruct注解总结 Spring Boot中注解使用工厂模式 本文详细介绍如何在Spring Boot中使用注解的方式实现...Spring Boot中注解使用工厂模式
本文详细介绍如何在Spring Boot中使用注解的方式实现工厂模式。主要解决了如何注入工厂提供的实例的问题。
问题
在controller层中注入工厂提供的service时,需要先注入工厂,再利用工厂注入工厂提供的service实例。代码如下:
public class MyController{ @Autowired StudentServiceFactory factory; StudentService service = factory.obtainStudentService("HustStudentServiceImpl"); }
此时会报空指针异常。
原因
Spring赋值注入是在类实例化之后完成,即先调用构造方法完成类实例化,再进行值注入。也就是说在初始化service时还未注入factory,自然会报空指针异常。
解决办法
1. 不使用@AutoWired注解,new一个factory
StudentServiceFactory facatory = new StudentServiceFactory();
但是这很不Spring,而且也不符合工厂模式规范(工厂模式应该是单例,因为一个工厂就够了),还需要额外实现单例模式。
2. 使用@PostConstruct注解
被@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。PreDestroy()方法在destroy()方法执行执行之后执行。
事实上,这个注解可以使用在任何类上。改写后的代码如下:public class MyController { @Autowired StudentServiceFactory factory; StudentService service; @PostConstruct public void init() { service = factory.obtainStudentService("hustStudentServiceImpl"); }
问题得到解决。
总结
主要学习了@PostConstruct注解的使用。
-
Java程序细胞工厂_Spring Boot实现原理分析
2021-03-18 11:35:19换句话说,Spring Boot并不是对原有Spring框架的颠覆,而是基于原有功能的一次进化,从而大大减少了不必要的配置工作量,使得整个框架变得更干净、更轻便。 2、 Spring Boo初始化过程 我们知道spring boot最为人...1、各种Bean
如果我们把Spring想象成人体,把Bean当做细胞的话,那么正是不同种类bean的相互协作才使得spring这个大工厂正常运行,有些bean做管理工作,有些bean为其它bean服务器,有些bean生产其它bean,有些bean承载了应用的业务逻辑。根据我目前的认知,我觉得spring中的bean根据作用可以划分为“普通bean”、“容器后处理器”、“bean后处理器”、“工厂bean”、“工厂方法bean” 这五大类。
普通bean:我这里指的是普通的用户配置的实现应用业务逻辑的bean,比如Dao Bean 或 Service Bean。
容器后处理器bean:这类bean它是为Spring容器服务的,实现了容器后处理器接口。比如像PropertySourcesPlaceholderConfigurer,它的作用就是在创建bean定义对象之前,解析用户配置的非线性值(${..})。
bean后处理器:这类bean它是为其它bean服务的,实现了bean后处理接口。这类bean可以在创建其它bean过程中的各个环节执行干预操作,比如ApplicationContextAwareProcessor,它会在初始化bean的阶段为bean的属性赋值敏感对象。
工厂bean:这类bean它实现了FactoryBean接口,即返回的bean对象不是bean本身,而是接口getObject方法的返回对象,如果希望获取工厂bean自身,引用是bean名称前面加&符号。比如MethodInvokingFactoryBean就是Spring实现的工厂bean,用于调用指定对象的方法。
工厂方法bean:又可以细分为静态工厂方法bean和实例工厂方法bean。这类bean通过调用指定的工厂方法返回bean对象。不要小看这类bean,配置类中被@bean注解的方法对象会被解析成bean定义对象,其类型就是工厂方法bean。
我写上面这段内容的目的是希望读者明白,Spring能实现Boot,本质上是因为有这些不同功能的Bean做支撑。换句话说,Spring Boot并不是对原有Spring框架的颠覆,而是基于原有功能的一次进化,从而大大减少了不必要的配置工作量,使得整个框架变得更干净、更轻便。
2、 Spring Boo初始化过程
我们知道spring boot最为人津津乐道的是大量减轻了配置工作量,只要有一个被@SpringBootApplication注解的启动类就可以运行。就像生命的孕育过程,从一个小小的细胞变成五脏俱全的新生儿,启动类之所以是启动类,本质是因为它被@SpringBootApplication注解了,因此@SpringBootApplication就是那个蕴含了强大生命力的细胞。那么,对@SpringBootApplication注解的解析是发生的什么时候,由谁完成的呢?答案是发生在spring启动过程中对容器的初始化阶段,是由ConfigurationClassPostProcessor(容器后处理器)完成的。
spring boot所以能大量减少用户的配置工作量,特别是减少了配置集成第三方组件的工作量,如mybatis,hibernate,redis。是因为spring默认编写了很多配置类(被@Configuration注解的类),这些类位于autoconfig’s jar里面。实现Boot的核心逻辑就是导入这些配置类,然后把它们转换成Bean定义对象(可以把这些配置类想象成食物,被摄入后转换成糖和碳水化合物)。 我现在还无法清楚准确的了解每个配置类的具体功能,但是读者要确信一点,配置类就是Boot的灵魂。比如有个配置类,
这个配置类被导入后,会转换成两个Bean定义对象,配置自身是一个bean定义对象(姑且叫beanA),被@Bean注解的propertySourcesPlaceholderConfigurer方法是一个bean定义对象(姑且叫beanB)。然后beanB是一个静态工厂方法bean,工厂方法是propertySourcesPlaceholderConfigurer,被生产的对象是PropertySourcesPlaceholderConfigurer 。PropertySourcesPlaceholderConfigurer本身是一个容器后处理器,它的其中一个作用是解析bean定义对象非线性属性值。
下面我描述下导入配置类和提取bean定义对象过程:
A. 进入ConfigurationClassPostProcessor(容器后处理器)的方法。
B. 从bean工厂获取配置类bean定义对象(通常此时唯一的配置类bean定义对象就是启动类)。
C. 解析配置类bean定义对象,从而获取spring系统配置类。这里需要介绍几个重要的注解对象,首先是@enableautoconfiguration,@SpringBootApplication被@enableautoconfiguration注解了,而@enableautoconfiguration又被@import注解了,@import导入了EnableAutoConfigurationImportSelector(导入选择器),它会读取在autoconfig’s jar包里的spring.factories文件, 其中key是”EnableAutoConfiguration”的类(都是配置类)。至于是否导入,会读取spring-autoconfigure-metadata.properties文件内容,根据@conditionalonclass注解判断配置类依赖的jar包是否存在。
D. 创建ConfigurationClassBeanDefinitionReader(配置类bean定义阅读器),从步骤C获取的配置类中提取bean定义对象,注册到bean工厂。阅读器会从以下四个方面提取bean定义对象.
d.1. 配置类自身,如果它被其它配置类导入了。
d.2. 配置类中被@Bean注解的方法。
d.3.配置类@ImportResource导入的xml配置文件。
d.4.配置类@Import导入的ImportBeanDefinitionRegistrar。
来源:[]()
-
spring-boot-gateway内置过滤器工厂
2020-07-31 22:15:56Spring Cloud Gateway 内置的过滤器工厂 内置的过滤器工厂 这里简单将Spring Cloud Gateway内置的所有过滤器工厂整理成了一张表格。如下: 过滤器工厂 作用 参数 AddRequestHeader ...DedupeResponseHeaSpring Cloud Gateway 内置的过滤器工厂
内置的过滤器工厂
这里简单将Spring Cloud Gateway内置的所有过滤器工厂整理成了一张表格。如下:
过滤器工厂 作用 参数 AddRequestHeader 为原始请求添加Header Header的名称及值 AddRequestParameter 为原始请求添加请求参数 参数名称及值 AddResponseHeader 为原始响应添加Header Header的名称及值 DedupeResponseHeader 剔除响应头中重复的值 需要去重的Header名称及去重策略 Hystrix 为路由引入Hystrix的断路器保护 HystrixCommand
的名称FallbackHeaders 为fallbackUri的请求头中添加具体的异常信息 Header的名称 PrefixPath 为原始请求路径添加前缀 前缀路径 PreserveHostHeader 为请求添加一个preserveHostHeader=true的属性,路由过滤器会检查该属性以决定是否要发送原始的Host 无 RequestRateLimiter 用于对请求限流,限流算法为令牌桶 keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus RedirectTo 将原始请求重定向到指定的URL http状态码及重定向的url RemoveHopByHopHeadersFilter 为原始请求删除IETF组织规定的一系列Header 默认就会启用,可以通过配置指定仅删除哪些Header RemoveRequestHeader 为原始请求删除某个Header Header名称 RemoveResponseHeader 为原始响应删除某个Header Header名称 RewritePath 重写原始的请求路径 原始路径正则表达式以及重写后路径的正则表达式 RewriteResponseHeader 重写原始响应中的某个Header Header名称,值的正则表达式,重写后的值 SaveSession 在转发请求之前,强制执行 WebSession::save
操作无 secureHeaders 为原始响应添加一系列起安全作用的响应头 无,支持修改这些安全响应头的值 SetPath 修改原始的请求路径 修改后的路径 SetResponseHeader 修改原始响应中某个Header的值 Header名称,修改后的值 SetStatus 修改原始响应的状态码 HTTP 状态码,可以是数字,也可以是字符串 StripPrefix 用于截断原始请求的路径 使用数字表示要截断的路径的数量 Retry 针对不同的响应进行重试 retries、statuses、methods、series RequestSize 设置允许接收最大请求包的大小。如果请求包大小超过设置的值,则返回 413 Payload Too Large
请求包大小,单位为字节,默认值为5M ModifyRequestBody 在转发请求之前修改原始请求体内容 修改后的请求体内容 ModifyResponseBody 修改原始响应体的内容 修改后的响应体内容 Default 为所有路由添加过滤器 过滤器工厂名称及值 **Tips:**每个过滤器工厂都对应一个实现类,并且这些类的名称必须以
GatewayFilterFactory
结尾,这是Spring Cloud Gateway的一个约定,例如AddRequestHeader
对应的实现类为AddRequestHeaderGatewayFilterFactory
。
1、AddRequestHeader GatewayFilter Factory
为原始请求添加Header,配置示例:
spring: cloud: gateway: routes: - id: add_request_header_route uri: https://example.org filters: - AddRequestHeader=X-Request-Foo, Bar
为原始请求添加名为
X-Request-Foo
,值为Bar
的请求头2、AddRequestParameter GatewayFilter Factory
为原始请求添加请求参数及值,配置示例:
spring: cloud: gateway: routes: - id: add_request_parameter_route uri: https://example.org filters: - AddRequestParameter=foo, bar
为原始请求添加名为foo,值为bar的参数,即:
foo=bar
3、AddResponseHeader GatewayFilter Factory
为原始响应添加Header,配置示例:
spring: cloud: gateway: routes: - id: add_response_header_route uri: https://example.org filters: - AddResponseHeader=X-Response-Foo, Bar
为原始响应添加名为
X-Request-Foo
,值为Bar
的响应头4、DedupeResponseHeader GatewayFilter Factory
DedupeResponseHeader可以根据配置的Header名称及去重策略剔除响应头中重复的值,这是Spring Cloud Greenwich SR2提供的新特性,低于这个版本无法使用。
我们在Gateway以及微服务上都设置了CORS(解决跨域)Header的话,如果不做任何配置,那么请求 -> 网关 -> 微服务,获得的CORS Header的值,就将会是这样的:
Access-Control-Allow-Credentials: true, true Access-Control-Allow-Origin: https://musk.mars, https://musk.mars
可以看到这两个Header的值都重复了,若想把这两个Header的值去重的话,就需要使用到DedupeResponseHeader,配置示例:
spring: cloud: gateway: routes: - id: dedupe_response_header_route uri: https://example.org filters: # 若需要去重的Header有多个,使用空格分隔 - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
去重策略:
- RETAIN_FIRST:默认值,保留第一个值
- RETAIN_LAST:保留最后一个值
- RETAIN_UNIQUE:保留所有唯一值,以它们第一次出现的顺序保留
若想对该过滤器工厂有个比较全面的了解的话,建议阅读该过滤器工厂的源码,因为源码里有详细的注释及示例,比官方文档写得还好:
org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory
5、Hystrix GatewayFilter Factory
为路由引入Hystrix的断路器保护,配置示例:
spring: cloud: gateway: routes: - id: hystrix_route uri: https://example.org filters: - Hystrix=myCommandName
Hystrix是Spring Cloud第一代容错组件,不过已经进入维护模式,未来Hystrix会被Spring Cloud移除掉,取而代之的是Alibaba Sentinel/Resilience4J。所以本文不做详细介绍了,感兴趣的话可以参考官方文档:
6、FallbackHeaders GatewayFilter Factory
同样是对Hystrix的支持,上一小节所介绍的过滤器工厂支持一个配置参数:
fallbackUri
,该配置用于当发生异常时将请求转发到一个特定的uri上。而FallbackHeaders
这个过滤工厂可以在转发请求到该uri时添加一个Header,这个Header的值为具体的异常信息。配置示例:spring: cloud: gateway: routes: - id: ingredients uri: lb://ingredients predicates: - Path=//ingredients/** filters: - name: Hystrix args: name: fetchIngredients fallbackUri: forward:/fallback - id: ingredients-fallback uri: http://localhost:9994 predicates: - Path=/fallback filters: - name: FallbackHeaders args: executionExceptionTypeHeaderName: Test-Header
这里也不做详细介绍了,感兴趣可以参考官方文档:
7、PrefixPath GatewayFilter Factory
为原始的请求路径添加一个前缀路径,配置示例:
spring: cloud: gateway: routes: - id: prefixpath_route uri: https://example.org filters: - PrefixPath=/mypath
该配置使访问
${GATEWAY_URL}/hello
会转发到https://example.org/mypath/hello
8、PreserveHostHeader GatewayFilter Factory
为请求添加一个preserveHostHeader=true的属性,路由过滤器会检查该属性以决定是否要发送原始的Host Header。配置示例:
spring: cloud: gateway: routes: - id: preserve_host_route uri: https://example.org filters: - PreserveHostHeader
如果不设置,那么名为
Host
的Header将由Http Client控制9、RequestRateLimiter GatewayFilter Factory
用于对请求进行限流,限流算法为令牌桶。配置示例:
spring: cloud: gateway: routes: - id: requestratelimiter_route uri: https://example.org filters: - name: RequestRateLimiter args: redis-rate-limiter.replenishRate: 10 redis-rate-limiter.burstCapacity: 20
由于另一篇文章中已经介绍过如何使用该过滤器工厂实现网关限流,所以这里就不再赘述了:
或者参考官方文档:
10、RedirectTo GatewayFilter Factory
将原始请求重定向到指定的Url,配置示例:
spring: cloud: gateway: routes: - id: redirect_route uri: https://example.org filters: - RedirectTo=302, https://acme.org
该配置使访问
${GATEWAY_URL}/hello
会被重定向到https://acme.org/hello
,并且携带一个Location:http://acme.org
的Header,而返回客户端的HTTP状态码为302注意事项:
- HTTP状态码应为3xx,例如301
- URL必须是合法的URL,该URL会作为
Location
Header的值
11、RemoveHopByHopHeadersFilter GatewayFilter Factory
为原始请求删除IETF组织规定的一系列Header,默认删除的Header如下:
- Connection
- Keep-Alive
- Proxy-Authenticate
- Proxy-Authorization
- TE
- Trailer
- Transfer-Encoding
- Upgrade
可以通过配置去指定仅删除哪些Header,配置示例:
spring: cloud: gateway: filter: remove-hop-by-hop: # 多个Header使用逗号(,)分隔 headers: Connection,Keep-Alive
12、RemoveRequestHeader GatewayFilter Factory
为原始请求删除某个Header,配置示例:
spring: cloud: gateway: routes: - id: removerequestheader_route uri: https://example.org filters: - RemoveRequestHeader=X-Request-Foo
删除原始请求中名为
X-Request-Foo
的请求头13、RemoveResponseHeader GatewayFilter Factory
为原始响应删除某个Header,配置示例:
spring: cloud: gateway: routes: - id: removeresponseheader_route uri: https://example.org filters: - RemoveResponseHeader=X-Response-Foo
删除原始响应中名为
X-Request-Foo
的响应头14、RewritePath GatewayFilter Factory
通过正则表达式重写原始的请求路径,配置示例:
spring: cloud: gateway: routes: - id: rewritepath_route uri: https://example.org predicates: - Path=/foo/** filters: # 参数1为原始路径的正则表达式,参数2为重写后路径的正则表达式 - RewritePath=/foo/(?<segment>.*), /$\{segment}
该配置使得访问
/foo/bar
时,会将路径重写为/bar
再进行转发,也就是会转发到https://example.org/bar
。需要注意的是:由于YAML语法,需用$\
替换$
15、RewriteResponseHeader GatewayFilter Factory
重写原始响应中的某个Header,配置示例:
spring: cloud: gateway: routes: - id: rewriteresponseheader_route uri: https://example.org filters: # 参数1为Header名称,参数2为值的正则表达式,参数3为重写后的值 - RewriteResponseHeader=X-Response-Foo, password=[^&]+, password=***
该配置的意义在于:如果响应头中
X-Response-Foo
的值为/42?user=ford&password=omg!what&flag=true
,那么就会被按照配置的值重写成/42?user=ford&password=***&flag=true
,也就是把其中的password=omg!what
重写成了password=***
16、SaveSession GatewayFilter Factory
在转发请求之前,强制执行
WebSession::save
操作,配置示例:spring: cloud: gateway: routes: - id: save_session uri: https://example.org predicates: - Path=/foo/** filters: - SaveSession
主要用在那种像 Spring Session 延迟数据存储(数据不是立刻持久化)的,并希望在请求转发前确保session状态保存情况。如果你将Spring Secutiry于Spring Session集成使用,并想确保安全信息都传到下游机器,你就需要配置这个filter。
17、secureHeaders GatewayFilter Factory
secureHeaders过滤器工厂主要是参考了这篇博客中的建议,为原始响应添加了一系列起安全作用的响应头。默认会添加如下Headers(包括值):
X-Xss-Protection:1; mode=block
Strict-Transport-Security:max-age=631138519
X-Frame-Options:DENY
X-Content-Type-Options:nosniff
Referrer-Policy:no-referrer
Content-Security-Policy:default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'
X-Download-Options:noopen
X-Permitted-Cross-Domain-Policies:none
如果你想修改这些Header的值,那么就需要使用这些Headers对应的后缀,如下:
xss-protection-header
strict-transport-security
frame-options
content-type-options
referrer-policy
content-security-policy
download-options
permitted-cross-domain-policies
配置示例:
spring: cloud: gateway: filter: secure-headers: # 修改 X-Xss-Protection 的值为 2; mode=unblock xss-protection-header: 2; mode=unblock
如果想禁用某些Header,可使用如下配置:
spring: cloud: gateway: filter: secure-headers: # 多个使用逗号(,)分隔 disable: frame-options,download-options
18、SetPath GatewayFilter Factory
修改原始的请求路径,配置示例:
spring: cloud: gateway: routes: - id: setpath_route uri: https://example.org predicates: - Path=/foo/{segment} filters: - SetPath=/{segment}
该配置使访问
${GATEWAY_URL}/foo/bar
时会转发到https://example.org/bar
,也就是原本的/foo/bar
被修改为了/bar
19、SetResponseHeader GatewayFilter Factory
修改原始响应中某个Header的值,配置示例:
spring: cloud: gateway: routes: - id: setresponseheader_route uri: https://example.org filters: - SetResponseHeader=X-Response-Foo, Bar
将原始响应中
X-Response-Foo
的值修改为Bar
20、SetStatus GatewayFilter Factory
修改原始响应的状态码,配置示例:
spring: cloud: gateway: routes: - id: setstatusstring_route uri: https://example.org filters: # 字符串形式 - SetStatus=BAD_REQUEST - id: setstatusint_route uri: https://example.org filters: # 数字形式 - SetStatus=401
SetStatusd的值可以是数字,也可以是字符串。但一定要是Spring
HttpStatus
枚举类中的值。上面这两种配置都可以返回401这个HTTP状态码。21、StripPrefix GatewayFilter Factory
用于截断原始请求的路径,配置示例:
spring: cloud: gateway: routes: - id: nameRoot uri: http://nameservice predicates: - Path=/name/** filters: # 数字表示要截断的路径的数量 - StripPrefix=2
如上配置,如果请求的路径为
/name/bar/foo
,那么则会截断成/foo
后进行转发 ,也就是会截断2个路径。22、Retry GatewayFilter Factory
针对不同的响应进行重试,例如可以针对HTTP状态码进行重试,配置示例:
spring: cloud: gateway: routes: - id: retry_test uri: http://localhost:8080/flakey predicates: - Host=*.retry.com filters: - name: Retry args: retries: 3 statuses: BAD_GATEWAY
可配置如下参数:
retries
:重试次数statuses
:需要重试的状态码,取值在org.springframework.http.HttpStatus
中methods
:需要重试的请求方法,取值在org.springframework.http.HttpMethod
中series
:HTTP状态码序列,取值在org.springframework.http.HttpStatus.Series
中
23、RequestSize GatewayFilter Factory
设置允许接收最大请求包的大小,配置示例:
spring: cloud: gateway: routes: - id: request_size_route uri: http://localhost:8080/upload predicates: - Path=/upload filters: - name: RequestSize args: # 单位为字节 maxSize: 5000000
如果请求包大小超过设置的值,则会返回
413 Payload Too Large
以及一个errorMessage
24、Modify Request Body GatewayFilter Factory
在转发请求之前修改原始请求体内容,该过滤器工厂只能通过代码配置,不支持在配置文件中配置。代码示例:
@Bean public RouteLocator routes(RouteLocatorBuilder builder) { return builder.routes() .route("rewrite_request_obj", r -> r.host("*.rewriterequestobj.org") .filters(f -> f.prefixPath("/httpbin") .modifyRequestBody(String.class, Hello.class, MediaType.APPLICATION_JSON_VALUE, (exchange, s) -> return Mono.just(new Hello(s.toUpperCase())))).uri(uri)) .build(); } static class Hello { String message; public Hello() { } public Hello(String message) { this.message = message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
Tips:该过滤器工厂处于 BETA 状态,未来API可能会变化,生产环境请慎用
25、Modify Response Body GatewayFilter Factory
可用于修改原始响应体的内容,该过滤器工厂同样只能通过代码配置,不支持在配置文件中配置。代码示例:
@Bean public RouteLocator routes(RouteLocatorBuilder builder) { return builder.routes() .route("rewrite_response_upper", r -> r.host("*.rewriteresponseupper.org") .filters(f -> f.prefixPath("/httpbin") .modifyResponseBody(String.class, String.class, (exchange, s) -> Mono.just(s.toUpperCase()))).uri(uri) .build(); }
Tips:该过滤器工厂处于 BETA 状态,未来API可能会变化,生产环境请慎用
26、Default Filters
Default Filters用于为所有路由添加过滤器工厂,也就是说通过Default Filter所配置的过滤器工厂会作用到所有的路由上。配置示例:
spring: cloud: gateway: default-filters: - AddResponseHeader=X-Response-Default-Foo, Default-Bar - PrefixPath=/httpbin
官方文档:
-
Spring Boot 扩展点应用之工厂加载机制
2018-10-07 22:27:00org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer,\ org.springframework.boot.context.ContextIdApplicationContextInitializer,\ org.springframework.boot.context.config....