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

怎么做能让网站尽快收录营业推广是一种什么样的促销方式

怎么做能让网站尽快收录,营业推广是一种什么样的促销方式,北京app外包,做关于星空的网站1. SpringBoot自动装载 Spring Boot 实现“自动装载”(Auto Configuration)是其最核心、最强大的功能之一,使得开发者可以快速搭建项目而无需进行复杂的 XML 配置。这一机制的底层实现主要依赖于 Spring Framework 的条件注解机制 和 Spring…

1. SpringBoot自动装载

Spring Boot 实现“自动装载”(Auto Configuration)是其最核心、最强大的功能之一,使得开发者可以快速搭建项目而无需进行复杂的 XML 配置。这一机制的底层实现主要依赖于 Spring Framework 的条件注解机制Spring Boot 的 SPI 扩展机制。以下是从底层源码和原理出发的详细剖析。


一、核心目标

Spring Boot 自动装载(Auto Configuration)指的是,应用启动时自动根据类路径中存在的类、当前环境、配置等条件,自动创建和注册一些常用 Bean,而不需要显式配置。


二、核心机制概览

1. SpringFactoriesLoader + META-INF/spring.factories

这是自动配置的入口机制,Spring Boot 会扫描所有依赖中的 spring.factories 文件,并加载其中声明的自动配置类。

# META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

上述配置表示,Spring Boot 在启动时会自动加载这些类并尝试加入到 Spring 容器中。

2. @EnableAutoConfiguration 注解

位于 @SpringBootApplication 注解中。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
}

3. AutoConfigurationImportSelector

这是最核心的选择器,它会去读取 spring.factories 中定义的 EnableAutoConfiguration 条目,并决定哪些配置类应被加载。

核心逻辑(精简):

@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {// 加载 spring.factories 中的自动配置类List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);// 过滤不需要加载的类configurations = removeDuplicates(configurations);return configurations.toArray(new String[0]);
}

三、条件注解机制(决定是否真正加载某配置类)

自动配置类虽然被扫描到了,但不一定会生效。这依赖于一系列 @Conditional 注解判断当前环境是否满足。

常见的条件注解包括:

注解含义
@ConditionalOnClass类路径存在某个类时才生效
@ConditionalOnMissingBean仅当某个 Bean 未被定义时生效
@ConditionalOnProperty配置文件中存在某个属性时生效
@ConditionalOnBean容器中存在某个 Bean 时生效

例子DataSourceAutoConfiguration):

@Configuration
@ConditionalOnClass(DataSource.class)
@ConditionalOnMissingBean(DataSource.class)
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {...
}

表示:仅当类路径中存在 javax.sql.DataSource,并且容器中没有用户自己定义的 DataSource 时,才自动配置一个数据源。


四、自动装载的执行流程(源码视角)

@SpringBootApplication|
@EnableAutoConfiguration|
@Import(AutoConfigurationImportSelector.class)|
AutoConfigurationImportSelector.selectImports()|
SpringFactoriesLoader.loadFactoryNames()|
读取 spring.factories 中的 EnableAutoConfiguration 配置项|
加载对应的 Configuration 类|
每个类会检查自身上的条件注解(如 @ConditionalOnClass)|
符合条件的类才会最终注入容器

五、实战调试建议

你可以这样调试自动装载:

  1. 启用自动配置报告

    debug: true
    

    启动后会在日志中输出:

    • 正在加载的自动配置类

    • 哪些配置类被排除了(并标明原因)

  2. 查看实际生效的 Bean

    $ mvn spring-boot:run
    $ curl /actuator/beans
    
  3. 禁用某些自动配置类

    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    

六、与 SPI (ServiceLoader) 的比较

Spring Boot 的 spring.factories 本质是 自定义 SPI 扩展机制 的一种增强形式:

  • 标准 Java SPI 机制使用 META-INF/services/

  • Spring Boot 用 META-INF/spring.factories

  • 加载方式通过 SpringFactoriesLoader 实现,更灵活、更强大(支持类名映射、值为多个类等)。


七、总结:关键组成列表

组件功能
@EnableAutoConfiguration启动自动配置功能
AutoConfigurationImportSelector加载配置类列表
spring.factories存储自动配置类清单
@Conditional 系列注解控制配置类是否生效
SpringFactoriesLoader从 classpath 加载配置元数据
@Configuration + @Bean定义自动注入的 Bean

2. 手写Spring Boot 自动装载模块

手写一个完整的 Spring Boot 自动装载模块(Starter),包括从零开始创建一个自定义 Starter、自动注册 Bean、条件装配,并说明每一步背后的原理。


一、自定义 Starter 的目标

我们要创建一个 my-logger-spring-boot-starter

  • 提供一个日志打印工具类 MyLogger

  • 如果配置中开启了 my.logger.enabled=true,自动将它注册为 Spring Bean。

  • 用户只需要添加依赖,不需要写任何配置或注解即可使用。


二、模块结构

my-logger-spring-boot-starter/
├── src/
│   └── main/
│       ├── java/
│       │   └── com/example/logger/
│       │       ├── MyLogger.java
│       │       ├── MyLoggerAutoConfiguration.java
│       │       └── condition/ConditionalOnMyLoggerEnabled.java
│       └── resources/
│           └── META-INF/
│               └── spring.factories
└── pom.xml

三、核心代码实现

1. MyLogger:要自动注册的 Bean

package com.example.logger;public class MyLogger {public void log(String msg) {System.out.println("[MyLogger] " + msg);}
}

2. 条件注解:@ConditionalOnMyLoggerEnabled

package com.example.logger.condition;import org.springframework.context.annotation.Conditional;import java.lang.annotation.*;@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(MyLoggerEnabledCondition.class)
public @interface ConditionalOnMyLoggerEnabled {
}

实现对应的条件判断类:

package com.example.logger.condition;import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;public class MyLoggerEnabledCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {// 读取配置项 my.logger.enabled,默认 falseString enabled = context.getEnvironment().getProperty("my.logger.enabled", "false");return Boolean.parseBoolean(enabled);}
}

3. 自动配置类:MyLoggerAutoConfiguration

package com.example.logger;import com.example.logger.condition.ConditionalOnMyLoggerEnabled;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@ConditionalOnMyLoggerEnabled
public class MyLoggerAutoConfiguration {@Beanpublic MyLogger myLogger() {return new MyLogger();}
}

4. spring.factories 文件

# src/main/resources/META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.logger.MyLoggerAutoConfiguration

被 Spring Boot 的 AutoConfigurationImportSelector 读取,加入到候选配置类中。


5. pom.xml 添加依赖打包标识

确保这是一个 Starter 模块:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

四、使用方式(在业务系统中)

业务系统只需:

  1. 添加依赖:

<dependency><groupId>com.example</groupId><artifactId>my-logger-spring-boot-starter</artifactId><version>1.0.0</version>
</dependency>
  1. 配置启用项:

my:logger:enabled: true
  1. 注入并使用:

@RestController
public class TestController {@Autowiredprivate MyLogger myLogger;@GetMapping("/log")public String log() {myLogger.log("Hello from custom logger");return "logged";}
}

五、验证自动配置是否生效

  • 启动时日志中可看到 Spring Boot 输出自动配置报告。

  • 使用 /actuator/beans 也能验证 MyLogger 是否被注册。

  • 修改配置 my.logger.enabled=false,即可验证它是否会被条件排除。


六、总结:底层自动装载要点再强调一次

机制实现方式
自动配置入口spring.factories + EnableAutoConfiguration
条件生效控制自定义 @Conditional 注解
SPI 机制扩展SpringFactoriesLoader
配置绑定@ConfigurationProperties(可选)
Bean 注册标准 @Configuration + @Bean

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

相关文章:

  • 怎样可以提升自己的网站seo研究中心好客站
  • 汽车配件网站建设淘宝关键词优化怎么弄
  • 网站开发过程中遇到的问题百度收录入口在哪里
  • 公安网站 模板热门搜索排行榜
  • 爱做网站免费app推广方案
  • 做网页设计网站有哪些第三方营销平台有哪些
  • 自己搭建vps上外网北京seo服务行者
  • 网站首页客服qq做超链接自媒体账号申请
  • 浙江网站制作公司水果店推广营销方案
  • 广元网站建设优化广西壮族自治区在线seo关键词排名优化
  • 打开网页时网站顶部显示广告随后消失的广告怎么做seo优化软件免费
  • 商业网站源码免费下载百度统计
  • python flask做网站广州seo优化效果
  • 怎么做自己的个人网站知名的网络推广
  • 做网站系统浙江百度代理公司
  • 网站首页代码怎么做今晚赛事比分预测
  • 洱源网站建设如何做seo整站优化
  • 凡客客服电话一键优化清理手机
  • 设计师个人网站源码seo网络排名优化哪家好
  • b2b网站推广排名seo查询系统
  • 我的网站百度怎么搜索不到了营销软件培训
  • 专门做特卖的网站是什么意思免费一键搭建网站
  • 南通有哪些礼品公司深圳纯手工seo
  • 深圳建设网站上市成人再就业技能培训班
  • wordpress软件最低要求seo软件安卓版
  • 做设计找素材那个网站最好用朋友圈广告投放价格表
  • wordpress如何做产品展示seo和sem的区别与联系
  • 学院网站建设管理厦门百度代理
  • 钢材做那个网站好长沙百度推广排名
  • 做外贸的网站赚钱吗广州网络推广公司排名