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

胡芦娃app软件下载网站有名的网站建设

胡芦娃app软件下载网站,有名的网站建设,微信公众号软文怎么写,昆明网站建设公司_1. 启动类与main方法 入口点:Spring Boot应用通常有一个带有SpringBootApplication注解的主类,并包含一个public static void main(String[] args)方法。 SpringBootApplication是一个组合注解,包含了: Configuration: 标记该类为…

1. 启动类与main方法

  • 入口点:Spring Boot应用通常有一个带有@SpringBootApplication注解的主类,并包含一个public static void main(String[] args)方法。
    • @SpringBootApplication是一个组合注解,包含了:
      • @Configuration: 标记该类为配置类。
      • @EnableAutoConfiguration: 自动根据classpath中的依赖进行配置。
      • @ComponentScan: 自动扫描指定包及其子包下的组件(如@Component@Service@Repository@Controller等)。
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

2. 创建SpringApplication实例

  • 构造函数
    • 推断应用类型:检查classpath中是否存在特定的类(如Servlet、Reactive相关的类),以确定是Servlet还是Reactive应用。
    • 加载初始器和监听器:从META-INF/spring.factories文件中加载默认的ApplicationContextInitializerApplicationListener

3. SpringApplication.run() 方法执行

环境准备
  • 创建并配置Environment:基于命令行参数、系统属性、环境变量等初始化Environment对象。
    • 可以通过--spring.config.locationSPRING_CONFIG_LOCATION环境变量指定外部配置文件的位置。
  • 触发事件:发布ApplicationEnvironmentPreparedEvent事件,允许外部工具或开发者自定义环境设置。
    • 可以通过实现ApplicationListener<ApplicationEnvironmentPreparedEvent>来自定义逻辑。
打印Banner
  • 如果启用了banner,则显示项目启动的图形化标识。
    • 可以通过设置spring.main.banner-modeoff来关闭banner。
创建ApplicationContext
  • 根据应用类型选择合适的ApplicationContext实现(例如,对于Web应用通常是AnnotationConfigServletWebServerApplicationContext)。
    • 对于非Web应用,可能是AnnotationConfigApplicationContext
加载Sources
  • 将所有指定的source(通常是带有@Configuration注解的类)注册到ApplicationContext中。
    • 这包括了自动扫描到的组件和显式声明的配置类。
刷新上下文前的准备工作
  • 触发ApplicationContextInitializedEvent事件。
  • 调用所有的ApplicationContextInitializer进行额外的配置。
    • 这些initializer可以在刷新之前对context进行进一步的定制。

4. ApplicationContext刷新过程

BeanFactory准备
  • 设置bean工厂的各种属性,包括转换服务、属性编辑器等。
    • 配置了诸如PropertyEditorRegistrar等用于处理属性值转换的机制。
BeanDefinition加载
  • 扫描classpath:寻找带有@Component@Service@Repository@Controller等注解的类,并将其注册为bean definitions。
    • 使用ClassPathScanningCandidateComponentProvider扫描指定包下的组件。
    • 条件注解(如@ConditionalOnClass@ConditionalOnMissingBean等)确保仅在满足特定条件时才生效。
自动配置
  • 自动配置机制:通过@EnableAutoConfiguration触发自动配置过程。它会根据classpath中的依赖自动配置相应的beans。
    • 自动配置类位于spring-boot-autoconfigure模块中,它们通过spring.factories文件被发现并加载。
    • 每个自动配置类都可能有条件注解,确保仅在满足特定条件时才生效。
BeanFactoryPostProcessor执行
  • 处理各种后处理器,如PropertySourcesPlaceholderConfigurer用于解析占位符。
    • 解析${...}形式的属性值,替换为实际值。
Bean实例化
  • 根据bean definitions实例化单例bean,并进行依赖注入。
    • 初始化bean时,可能还会执行一些生命周期回调方法,如@PostConstruct标注的方法。
    • 如果需要AOP代理,则在此阶段生成代理对象。

5. 刷新完成后的工作

  • 触发ContextRefreshedEvent:表示ApplicationContext已完全刷新。
  • 执行CommandLineRunner/ApplicationRunner beans:如果有任何实现了CommandLineRunnerApplicationRunner接口的beans,它们的方法会被调用。
    • 这些runner可以用来执行最后的初始化操作。

6. 应用就绪

  • 触发ApplicationReadyEvent:表示应用已经准备好接收请求或执行预定的任务。
  • 开启web服务器:如果是Web应用,此时嵌入式的Tomcat服务器将会启动,并开始监听HTTP请求。

7. 错误处理

  • 错误处理机制:Spring Boot提供了强大的错误处理机制,包括但不限于自定义错误页面、全局异常处理器等,以增强应用的健壮性。
    • 可以通过实现ErrorController来自定义错误页面。
    • 使用@ControllerAdvice@ExceptionHandler来处理全局异常。

额外细节

  • 外部化配置:支持多种方式的外部化配置,如命令行参数、环境变量、properties/yaml文件等。

    • 可以通过application.propertiesapplication.yml文件进行配置。
    • 支持使用@Value注解直接注入配置值。
    • 可以通过spring.profiles.active指定激活的profile,从而加载不同的配置。
  • 健康检查和度量:通过Actuator模块提供的端点,可以监控应用的健康状况和性能指标。

    • 提供了诸如/actuator/health/actuator/metrics等端点。
    • 可以自定义健康指示器(Health Indicator)来扩展健康检查功能。
  • 日志配置:Spring Boot默认支持多种日志框架,并可以通过简单的配置定制日志级别和输出格式。

    • 支持Logback、Log4j2等日志框架,默认使用Logback。
    • 可以通过logging.level.*=DEBUG等配置项调整日志级别。

关键技术细节

  • 条件注解:如@ConditionalOnClass@ConditionalOnMissingBean等,使得Spring Boot能够根据当前环境动态地启用或禁用某些配置。
  • 事件驱动模型:Spring Boot在整个启动过程中使用了大量的事件发布和监听机制,这使得开发者可以在应用启动的不同阶段插入自定义逻辑。
    • 例如,可以通过实现ApplicationListener<ApplicationStartedEvent>来自定义启动逻辑。

示例代码片段

以下是一个更完整的示例,展示了如何使用Spring Boot的基本结构,并结合了一些高级特性和配置:

@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication app = new SpringApplication(DemoApplication.class);// 关闭bannerapp.setBannerMode(Banner.Mode.OFF);// 添加自定义的ApplicationContextInitializerapp.addInitializers(new MyCustomApplicationContextInitializer());app.run(args);}
}@Component
public class MyCommandLineRunner implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {System.out.println("MyCommandLineRunner executed");}
}@Configuration
public class MyCustomConfig {@Bean@ConditionalOnMissingBean(name = "customBean")public String customBean() {return "This is a custom bean";}
}// 自定义健康检查
@Component
public class CustomHealthIndicator extends AbstractHealthIndicator {@Overrideprotected void doHealthCheck(Health.Builder builder) throws Exception {builder.up().withDetail("custom", "Everything is OK!");}
}// 全局异常处理器
@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(value = Exception.class)public ResponseEntity<Object> exception(Exception exception) {return new ResponseEntity<>("An error occurred: " + exception.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);}
}// 自定义ApplicationContextInitializer
public class MyCustomApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {@Overridepublic void initialize(ConfigurableApplicationContext applicationContext) {ConfigurableEnvironment environment = applicationContext.getEnvironment();// 自定义环境配置Map<String, Object> map = new HashMap<>();map.put("my.custom.property", "customValue");environment.getPropertySources().addFirst(new MapPropertySource("customProperties", map));}
}
http://www.dtcms.com/wzjs/556748.html

相关文章:

  • 外贸建站 厦门网络推广工作能长久吗
  • 电子商务网站建设的一般步骤有贵阳做网络推广的公司
  • 怎么上传网站源码厦门市建设工程造价网站
  • 平台与网站有什么区别wordpress修改为中文
  • 3m网站源码设计网站多少钱
  • 网站建设软件排行企业网站建设包含哪些内容
  • 烟台外贸网站建设公司总经理培训推广哪家好
  • 网站建设word文档wordpress获取qq头像评论
  • 做图片祝福的网站建设部工程业绩网站
  • 最专业的礼品网站案例参考wordpress 手机首页
  • 安全质量报监建设局网站wordpress和vue
  • 网站修改域名qt开发安卓app
  • 长春网站制作系统买网站平台名字吗
  • 网站建设需要提供什么资料网站开发如何建设公共页面
  • 搭建企业网站流程河南旅游网站建设
  • 杭州网站建设市场wordpress多用途主题排行
  • 专业网站排名优化小程序appld
  • 网站建设中的注册和登录页面网页传奇哪个最火
  • 妇科医院网站设计高端酒店网站模板
  • 哪里有网站制作价格开发外贸产品的网站
  • 大连网站建设报价优质商家用asp.net开发网站的优势
  • 信息门户网站建设报价沈阳网站优化推广方案
  • 做网站补贴网站建设的原则
  • 营销型网站建设方案书欧米茄表价格官网报价
  • 网站建设速度如何解决购物网站设计会员管理模块
  • 电子商务网站建设重要性百度怎么自己做网站吗
  • 网站优化的好处建立网站站点的过程
  • 哪个网站可以做ppt赚钱济南网络品牌推广
  • 国外有没有专门做靶材的网站网站文案优化
  • 搭建淘宝客网站源码包子店vi设计