好的文章进行收集整理:
1.SpringApplication.run做了哪些事
https://mp.weixin.qq.com/s/uP4seo__qYMJMzmbWyUUnA
2.SpringBoot @ConditionalOnBean、@ConditionalOnMissingBean
https://blog.youkuaiyun.com/tianyaleixiaowu/article/details/78201587
@ConditionalOnBean(Abc.class) Abc.class 已注入的Bean存在时处理
@ConditionalOnMissingBean(Abc.class)
@Bean
@ConditionalOnMissingBean
public NacosDiscoveryProperties nacosProperties() {
return new NacosDiscoveryProperties();
}
NacosDiscoveryProperties不存在时,进行初始化NacosDiscoveryProperties
@ConditionalOnProperty是指在application.yml里配置的属性是否为true,其他的几个都是对class的判断。
3.Java中Class标签@PostConstruct和@PreDestroy,表示执行顺序,服务器仅加载一次
https://www.jianshu.com/p/98cf7d8b9ec3
4.Spring cloud 网络配置相关,InetUtils、InetUtilsProperties和UtilAutoConfiguration提供了网络配置相关的功能。
网卡选择:https://blog.youkuaiyun.com/xichenguan/article/details/76557065
Spring Cloud Netflix Eureka: 多网卡环境下Eureka服务注册IP选择问题
https://blog.youkuaiyun.com/neosmith/article/details/53126924
Spring Cloud Eureka 多网卡配置最终版
https://blog.youkuaiyun.com/xichenguan/article/details/76632033
5.@CallerSensitive
使用CallerSensitive后,getCallerClass不再用固定深度去寻找actual caller(“我”),而是把所有跟反射相关的接口方法都标注上CallerSensitive,搜索时凡看到该注解都直接跳过,这样就有效解决了前面黑客通过构造双重反射来提升权限的问题https://blog.youkuaiyun.com/aguda_king/article/details/72355807
6.EndPoint 主要用于暴漏SpringMvc内部运行的信息
Spring boot actuator监控端点集成,可以集成监控+数据暴漏+grafana图表软件,进行图形化展示
源码解析:https://blog.youkuaiyun.com/qq_26000415/article/details/79060258
端点小总结:http://blog.didispace.com/spring-boot-actuator-1/
Endpoint也是通过spring.factories实现扩展功能,注入了对应的Bean来实现应用监控的功能
https://www.jianshu.com/p/fd93d941bf3b
7.@Bean 注册对象时,方法参数是取Spring 容器中的具体声明类的注册Bean。如果声明类注册的对象有多个,则需要参数名一致,否则会报不确定选择哪个Bean。
@Bean
@ConditionalOnBean(AutoServiceRegistrationProperties.class)
public NacosAutoServiceRegistration nacosAutoServiceRegistration(
NacosServiceRegistry registry,
AutoServiceRegistrationProperties autoServiceRegistrationProperties,
NacosRegistration registration) {
return new NacosAutoServiceRegistration(registry,
autoServiceRegistrationProperties, registration);
}
https://blog.youkuaiyun.com/ncuzengxiebo/article/details/80805786
8.Spring autoConfigure 通过标签进行自动化配置,带条件的初始化,以及配置先后顺序,具体Bean没有了后进行自动再注册(防止对象的销毁,跟对象的初始化进行处理)
具体标签说明:https://rensanning.iteye.com/blog/2363467
@Configuration
@EnableConfigurationProperties
@ConditionalOnNacosDiscoveryEnabled
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true)
@AutoConfigureAfter({ AutoServiceRegistrationConfiguration.class,
AutoServiceRegistrationAutoConfiguration.class })
public class NacosDiscoveryAutoConfiguration {
@Bean
public NacosServiceRegistry nacosServiceRegistry(
NacosDiscoveryProperties nacosDiscoveryProperties) {
return new NacosServiceRegistry(nacosDiscoveryProperties);
}
@Bean
@ConditionalOnBean(AutoServiceRegistrationProperties.class)
public NacosRegistration nacosRegistration(
NacosDiscoveryProperties nacosDiscoveryProperties,
ApplicationContext context) {
return new NacosRegistration(nacosDiscoveryProperties, context);
}
@Bean
@ConditionalOnBean(AutoServiceRegistrationProperties.class)
public NacosAutoServiceRegistration nacosAutoServiceRegistration(
NacosServiceRegistry registry,
AutoServiceRegistrationProperties autoServiceRegistrationProperties,
NacosRegistration registration) {
return new NacosAutoServiceRegistration(registry,
autoServiceRegistrationProperties, registration);
}
}
9.SpringBoot使用ApplicationEvent&Listener完成业务解耦
https://www.jianshu.com/p/4359dd4b36a6?spm=a2c4e.11153940.blogcont637895.7.c88b509esJgXqx
10.Spring框架开发之SmartLifecycle接口
Spring加载和初始化所有bean后,接着执行一些任务或者启动需要的异步服务,当Spring容器加载所有bean并完成初始化之后,会接着回调实现该接口的类中对应的方法(start()方法)。
https://blog.youkuaiyun.com/catoop/article/details/71274561
https://blog.youkuaiyun.com/zouhuixing/article/details/80304141
11.nacos discovery 流程原理
https://blog.youkuaiyun.com/Mr_Errol/article/details/84938993
https://blog.youkuaiyun.com/Mr_Errol/article/details/85089129
12.nacos 源码
https://www.jianshu.com/p/20ddf3bc6f8e
13.Spring boot 配置资源类 PropertySourceLocator 远程config读取主要类
例如nacos的配置中心:
@Order(0) public class NacosPropertySourceLocator implements PropertySourceLocator
https://www.cnblogs.com/lizo/p/7683300.html
14.Spring boot FailureAnalyzer 一种很好的方式在启动时拦截异常并将其转换为易读的消息,并将其包含在FailureAnalysis中。
public class NacosConnectionFailureAnalyzer extends AbstractFailureAnalyzer<NacosConnectionFailureException> { @Override protected FailureAnalysis analyze(Throwable rootFailure, NacosConnectionFailureException cause) { return new FailureAnalysis("Application failed to connect to Nacos server", "check your nacos server config", cause); } }
同时META-INF/spring.factories中添加
org.springframework.boot.diagnostics.FailureAnalyzer=\ org.springframework.cloud.alibaba.nacos.diagnostics.analyzer.NacosConnectionFailureAnalyzer
因为SpringApplication.run执行时初始化了FailureAnalyzers
ApplicationArguments applicationArguments = new DefaultApplicationArguments( args); ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments); Banner printedBanner = printBanner(environment); context = createApplicationContext(); analyzers = new FailureAnalyzers(context); prepareContext(context, environment, listeners, applicationArguments, printedBanner); refreshContext(context); afterRefresh(context, applicationArguments); listeners.finished(context, null); stopWatch.stop(); if (this.logStartupInfo) { new StartupInfoLogger(this.mainApplicationClass) .logStarted(getApplicationLog(), stopWatch); } return context;
https://blog.youkuaiyun.com/mytt_10566/article/details/83963427
https://blog.youkuaiyun.com/lz710117239/article/details/80110736
15.AbstractHealthIndicator
Spring 内部healthEndPoint 解析https://blog.youkuaiyun.com/qq_26000415/article/details/79065075
https://blog.youkuaiyun.com/liupeifeng3514/article/details/80558414