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

熊撑号怎么做网站推广百度搜索seo优化技巧

熊撑号怎么做网站推广,百度搜索seo优化技巧,广州响应式网站建设,html5制作网站🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

963034f17590412b808770f619144970.png

🎉🎉欢迎光临,终于等到你啦🎉🎉

🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀

🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 🚀

本专栏带你从Spring入门到入魔 

这是苏泽的个人主页可以看到我其他的内容哦👇👇

努力的苏泽http://suzee.blog.csdn.net/

 


 

springboot帮我们做了什么

一个字--自动!

通常搭建一个基于spring的web应用,我们需要做以下工作:

1、pom文件中引入相关jar包,包括spring、springmvc、redis、mybaits、log4j、mysql-connector-java 等等相关jar ...

2、配置web.xml,Listener配置、Filter配置、Servlet配置、log4j配置、error配置 ...

3、配置数据库连接、配置spring事务

4、配置视图解析器

5、开启注解、自动扫描功能

6、配置完成后部署tomcat、启动调试

......

这些都是Spring boot在背后默默为我们做的工作

那 有没有想过为什么? 

本文给大家来解读Spring的源码 拆解他的自动配置 一步一步解释为什么Springboot为何那么强大

 

 

进入他的细节源码之前 首先关注 ---架构

cb4b233de36d4b1c8bab048bf0e7cf94.png

解读SpringBootApplication

@Target(ElementType.TYPE)            // 注解的适用范围,其中TYPE用于描述类、接口(包括包注解类型)或enum声明
@Retention(RetentionPolicy.RUNTIME)  // 注解的生命周期,保留到class文件中(三个生命周期)
@Documented                          // 表明这个注解应该被javadoc记录
@Inherited                           // 子类可以继承该注解
@SpringBootConfiguration             // 继承了Configuration,表示当前是注解类
@EnableAutoConfiguration             // 开启springboot的注解功能,springboot的四大神器之一,其借助@import的帮助
@ComponentScan(excludeFilters = {    // 扫描路径设置(具体使用待确认)@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
...
}

@Configuration

这里的@Configuration 对我们来说不陌生,它就是 JavaConfig 形式的 Spring Ioc 容器的配置类使用的那个@Configuration,SpringBoot 社区推荐使用基于 JavaConfig 的配置形式,所以,这里的启动类标注了@Configuration 之后,本身其实也是一个 IoC 容器的配置类。 举几个简单例子回顾下,XML 跟 config 配置方式的区别:

表达形式层面 基于 XML 配置的方式是这样:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"default-lazy-init="true"><!--bean定义-->
</beans>

而基于 JavaConfig 的配置方式是这样:

@Configuration
public class MockConfiguration{//bean定义
}

任何一个标注了@Configuration 的 Java 类定义都是一个 JavaConfig 配置类。

注册 bean 定义层面 基于 XML 的配置形式是这样:

<bean id="mockService" class="..MockServiceImpl">...
</bean>

而基于 JavaConfig 的配置形式是这样的:

@Configuration
public class MockConfiguration{@Beanpublic MockService mockService(){return new MockServiceImpl();}
}

任何一个标注了@Bean 的方法,其返回值将作为一个 bean 定义注册到 Spring 的 IoC 容器,方法名将默认成该 bean 定义的 id。

表达依赖注入关系层面 为了表达 bean 与 bean 之间的依赖关系,在 XML 形式中一般是这样:

<bean id="mockService" class="..MockServiceImpl"><propery name ="dependencyService" ref="dependencyService" />
</bean><bean id="dependencyService" class="DependencyServiceImpl"></bean>

而基于 JavaConfig 的配置形式是这样的:

@Configuration
public class MockConfiguration{@Beanpublic MockService mockService(){return new MockServiceImpl(dependencyService());}@Beanpublic DependencyService dependencyService(){return new DependencyServiceImpl();}
}

@ComponentScan:


@ComponentScan注解用于指定Spring容器扫描组件的基础包路径。它会自动扫描指定包及其子包下的类,并将被@Component及其派生注解标注的类识别为Spring的组件,将其实例化并纳入容器管理。

// 在包com.example中定义了两个被@Component注解标记的类:UserService和UserRepository// UserService.java
package com.example;import org.springframework.stereotype.Component;@Component
public class UserService {// ...
}// UserRepository.java
package com.example;import org.springframework.stereotype.Component;@Component
public class UserRepository {// ...
}// AppConfig.java
package com.example;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration
@ComponentScan("com.example") // 指定扫描的基础包路径
public class AppConfig {// 配置其他的Bean
}

@ComponentScan的原理可以从源代码的角度来解释。在Spring的源代码中,@ComponentScan注解被解析为一个Bean扫描器。当Spring容器启动时,扫描器会根据指定的包路径,将带有@Component及其派生注解的类解析为BeanDefinition对象,并注册到BeanFactory中。这样,Spring容器就知道这些类是组件,并可以对其进行实例化和管理。

 

@EnableAutoConfiguration:


@EnableAutoConfiguration注解用于启用Spring Boot的自动配置功能。它会根据项目的依赖和配置,自动加载和配置一系列的Spring Bean,简化了项目的配置过程。

@EnableAutoConfiguration的原理可以从源代码的角度来解释。在Spring Boot的源代码中,@EnableAutoConfiguration注解被解析为一个自动配置处理器。当Spring Boot应用启动时,处理器会根据classpath下的META-INF/spring.factories文件中的配置,加载并执行一系列的自动配置类。这些自动配置类根据约定和条件,自动创建和配置相应的Bean对象,完成项目的自动化配置。

Import(AutoConfigurationImportSelector.class)注解:

4645b32fc9024aff95da548d4c880141.png

图中看出 AutoConfigurationImportSelector 继承了 DeferredImportSelector 继承了 ImportSelector

ImportSelector有一个方法为:selectImports。

@Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {if (!isEnabled(annotationMetadata)) {return NO_IMPORTS;}AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);AnnotationAttributes attributes = getAttributes(annotationMetadata);List<String> configurations = getCandidateConfigurations(annotationMetadata,attributes);configurations = removeDuplicates(configurations);Set<String> exclusions = getExclusions(annotationMetadata, attributes);checkExcludedClasses(configurations, exclusions);configurations.removeAll(exclusions);configurations = filter(configurations, autoConfigurationMetadata);fireAutoConfigurationImportEvents(configurations, exclusions);return StringUtils.toStringArray(configurations);}

AutoConfigurationImportSelector是Spring Boot内部的一个选择器类,它会根据项目的依赖和配置,选择要自动配置的类。该选择过程是基于条件注解(如@ConditionalOnClass、@ConditionalOnProperty等)进行的,只有满足条件的自动配置类才会被选择。

 

@AutoConfigurationPackage

// 在包com.example中定义了一个主配置类ApplicationConfig// ApplicationConfig.java
package com.example;import org.springframework.boot.autoconfigure.AutoConfigurationPackage;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@AutoConfigurationPackage // 标注了@AutoConfigurationPackage注解
public class ApplicationConfig {// 主配置类的内容// ...
}

当Spring Boot启动时,它会扫描并解析主配置类ApplicationConfig。在解析过程中,Spring Boot会检测到@AutoConfigurationPackage注解,并执行相应的处理。

@AutoConfigurationPackage注解被解析为一个特殊的Bean定义处理器。处理器会读取主配置类ApplicationConfig的包路径(com.example),并将该包路径注册到Spring的BeanFactory中。

注册完成后,Spring容器会将com.example包及其子包作为组件扫描的范围。这意味着Spring会扫描该包下的所有类,并根据条件注解(如@ConditionalOnClass@ConditionalOnMissingBean等)来决定是否自动配置相应的Bean。

通过将主配置类所在的包及其子包作为自动配置的包,我们可以确保自动配置类能够正确地扫描和应用到我们的应用程序中。

 

 

 

http://www.hrbkazy.com/news/40540.html

相关文章:

  • 网站浏览成交指标台州网站建设平台
  • 房产网站建设方案百度seo关键词优化方案
  • 有网站开发经验怎么写简历抚州seo排名
  • 做推广的网站需要注意什么2023年8月新冠
  • 老家装设计网杭州排名优化公司
  • 取消网站备案时间雅虎日本新闻
  • 昆山建筑行业网站网站运营优化培训
  • 公司网站建设代码都写完了seo是什么平台
  • 图像处理专业网站信息流优化师是什么
  • 赵县网站建设免费自建网站有哪些
  • 有没有免费的seo网站网络广告投放网站
  • 怎么做美食的视频网站app 推广
  • 上海响应式建站semi是什么意思
  • 牛商网做网站要多少钱手机如何制作网页链接
  • 怎么给产品找关键词seo是什么东西
  • 外包网址长沙网站优化方案
  • 苏州做网站的公司有哪些如何做网站推广的策略
  • 怎么增加网站反链个人自己免费建网站
  • diy学做衣服网站建一个外贸独立站大约多少钱
  • 公司注册名字整站优化 快速排名
  • 文成网站制作google推广怎么做
  • 珠海建设网站公司汕头seo网站建设
  • 建设工程投标文件在哪个网站有发布seo排名计费系统
  • host域名主机服务商商务企业网站模板深圳十大教育培训机构排名
  • 中山网站建设文化如何2345电脑版网址导航
  • 网站开发类毕业设计北京网站推广营销服务电话
  • 北京网站设计公司地址怎么建立自己的网站平台
  • 网站建设技术课程设计报告东莞网站排名提升
  • 专门做零食批发的网站seo外链网
  • 动态网站托管山东seo网络推广