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

哈尔滨网站制作公司哪家好营销策略有哪些有效手段

哈尔滨网站制作公司哪家好,营销策略有哪些有效手段,家政网站模板下载,wordpress主题位置欢迎光临小站:致橡树 Spring Boot Starter 的核心设计理念是 约定优于配置,其核心实现基于 自动配置(Auto-Configuration) 和 条件化注册(Conditional Registration)。以下是其生效原理: 约定…

 欢迎光临小站:致橡树

Spring Boot Starter 的核心设计理念是 约定优于配置,其核心实现基于 自动配置(Auto-Configuration)条件化注册(Conditional Registration)。以下是其生效原理:

约定大于配置

通过预定义合理的默认行为和规范,减少开发者需要手动配置的步骤。比较显著的变化就是减少XML配置。还有一些实际体现如下所示:

  • 项目结构约定

    • 默认目录结构:如 src/main/java 存放代码,src/main/resources 存放配置文件。

    • 配置文件命名application.propertiesapplication.yml 自动被加载,无需显式指定路径。

  • 自动配置(Auto-Configuration)

    • 条件化 Bean 注册:根据类路径依赖(如存在 DataSource 类)自动配置数据库连接池

    • 默认参数值:如嵌入式 Tomcat 默认端口为 8080,无需手动指定。

  • Starter 依赖

    • 依赖聚合:引入 spring-boot-starter-web 即自动包含 Web 开发所需的所有依赖(如 Tomcat、Jackson、Spring MVC)。

    • 开箱即用:无需手动管理版本兼容性。

  • RESTful 路由映射

    • 注解驱动:通过 @GetMapping("/path") 即可定义接口,无需在 XML 中配置路由规则。

自动配置机制

触发阶段:@EnableAutoConfiguration

  • 应用启动时,@SpringBootApplication 组合了 @EnableAutoConfiguration,触发自动配置流程。

  • AutoConfigurationImportSelector 被调用,负责加载所有候选的自动配置类。

public String[] selectImports(AnnotationMetadata metadata) {// 1. 加载所有候选自动配置类List<String> configurations = getCandidateConfigurations();// 2. 去重、过滤、排序configurations = removeDuplicates(configurations);configurations = filter(configurations, autoConfigurationMetadata);return configurations.toArray(new String[0]);
}

加载与筛选:spring.factories

  • 加载所有候选配置类
    从所有 META-INF/spring.factories 文件中读取 EnableAutoConfiguration 对应的配置类。在 Spring Boot 3.x 中,自动配置类的加载方式从 spring.factories 过渡到 AutoConfiguration.imports,并引入了 ImportCandidates 类来处理这一变化。

  • 去重与过滤
    移除重复的配置类,并通过条件注解(如 @ConditionalOnClass ,@ConditionalOnMissingBean ) 有选择的保留当前环境的配置类。

    • @ConditionalOnClass:类路径存在指定类时生效

    • @ConditionalOnMissingBean:容器中不存在指定 Bean 时生效

    • @ConditionalOnProperty:配置属性匹配时生效

  • 排序
    根据 @AutoConfigureOrder@AutoConfigureAfter 调整配置类的加载顺序。

Bean 注册

  • 筛选后的自动配置类被解析为标准的 @Configuration 类。

  • 每个配置类中的 @Bean 方法根据条件注解动态注册 Bean 到 Spring 容器。

编写自定义Spring Boot Starter

项目结构规划

建议分为两个模块:

  1. 自动配置模块:包含核心逻辑和自动配置类(如 hello-spring-boot-autoconfigure)。

  2. Starter模块:空项目,仅作为依赖聚合(如 hello-spring-boot-starter)。

hello-spring-boot-starter-parent(父POM)
├── hello-spring-boot-autoconfigure(自动配置模块)
└── hello-spring-boot-starter(Starter模块)
hello-spring-boot-starter/
├── hello-spring-boot-autoconfigure/
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/com/example/autoconfigure/
│   │   │   │   ├── HelloAutoConfiguration.java
│   │   │   │   ├── HelloProperties.java
│   │   │   │   └── HelloService.java
│   │   │   └── resources/
│   │   │       └── META-INF/
│   │   │           └── spring.factories
│   │   └── test/
│   └── pom.xml
├── hello-spring-boot-starter/
│   └── pom.xml
└── pom.xml

创建自动配置模块(hello-spring-boot-autoconfigure)

添加Maven依赖

<!-- pom.xml -->
<dependencies><!-- Spring Boot 自动配置基础依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>3.1.5</version></dependency><!-- 可选:配置属性处理 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>3.1.5</version><optional>true</optional></dependency>
</dependencies>

定义核心服务类

public class HelloService {private String message = "Hello, World!";  // 默认消息public String sayHello() {return message;}// Getter和Setter用于通过配置修改messagepublic String getMessage() { return message; }public void setMessage(String message) { this.message = message; }
}

定义配置属性类(可选)

@ConfigurationProperties(prefix = "hello")
public class HelloProperties {private String message = "Hello, World!";// Getter和Setterpublic String getMessage() { return message; }public void setMessage(String message) { this.message = message; }
}

编写自动配置类

@Configuration
@EnableConfigurationProperties(HelloProperties.class)  // 启用配置属性
@ConditionalOnClass(HelloService.class)  // 当HelloService在类路径时生效
public class HelloAutoConfiguration {@Bean@ConditionalOnMissingBean  // 当用户未自定义HelloService时生效public HelloService helloService(HelloProperties properties) {HelloService service = new HelloService();service.setMessage(properties.getMessage());return service;}
}

注册自动配置

resources/META-INF/ 下创建 spring.factories 文件:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfigure.HelloAutoConfiguration

创建Starter模块(hello-spring-boot-starter)

添加Maven依赖

<!-- pom.xml -->
<dependencies><!-- 引入自动配置模块 --><dependency><groupId>com.example</groupId><artifactId>hello-spring-boot-autoconfigure</artifactId><version>1.0.0</version></dependency>
</dependencies>

使用自定义Starter

在应用中引入Starter依赖

<!-- 用户项目的pom.xml -->
<dependency><groupId>com.example</groupId><artifactId>hello-spring-boot-starter</artifactId><version>1.0.0</version>
</dependency>

在代码中注入Bean

@RestController
public class HelloController {@Autowiredprivate HelloService helloService;@GetMapping("/hello")public String hello() {return helloService.sayHello();}
}

自定义配置(可选)

application.properties 中修改消息:

hello.message=你好, Spring Boot!

http://www.dtcms.com/wzjs/218355.html

相关文章:

  • 寻找项目做的网站什么是网络软文营销
  • 今日足球赛事分析推荐seo新人怎么发外链
  • 科技网站建设的调研百度站长链接提交
  • 英孚做测试的网站京东关键词优化技巧
  • 九江网站推广黄页网络的推广网站有哪些类型
  • 东道设计是4a公司吗搜索引擎优化 简历
  • 网站首页排名下降搜索优化引擎
  • 安徽动漫公司 网站制作 安徽网新域名购买平台
  • 湖南人文科技学院怎么样太原seo报价
  • wordpress标签怎么做静态化优化大师官网登录入口
  • 网页制作的公司有哪些seo推广案例
  • 建设一个地方门户网站快速建站平台
  • 买个网站服务器多少钱百度公司好进吗
  • 建筑工程招投标网站在线咨询
  • 有哪个网站做正品港货东莞seo建站公司
  • 胶南网站建设价格百度站长官网
  • 跨网浏览器南宁关键词优化服务
  • 网站改版需要注意哪些seo问题seo查询官方网站
  • 58同城推广怎么收费seo顾问推推蛙
  • 政府网站设计打开网址资料网站
  • 南庄网站建设优化设计电子课本下载
  • 免费的创建个人网站搜一搜排名点击软件
  • 高端网站制作 上海网络营销和传统营销有什么区别
  • 做设计的都用那些网站网络营销的手段有哪些
  • 无锡做网站seo百度一下点击搜索
  • 南京移动网站建设天津网站排名提升多少钱
  • 哪个网站可以接cad图纸做优化大师有必要安装吗
  • 做网站开发要具备什么知识如何自己制作网站
  • 91色做爰免费网站关键词优化是怎样收费的
  • 专门帮做ppt的网站吗品牌营销推广方案怎么做