住房建设城乡网站查找网站域名
web/
2025/9/27 6:54:20/
文章来源:
住房建设城乡网站,查找网站域名,在哪网站开发软件,定制化网站开发的好处前言
在现代的Java开发中#xff0c;Spring Boot已经成为了一个备受欢迎的框架。它以其简化开发流程、提高效率和强大的功能而闻名#xff0c;使得开发人员能够更加专注于业务逻辑的实现而不必过多地关注配置问题。
然而#xff0c;你是否曾经好奇过Spring Boot是如何做到…前言
在现代的Java开发中Spring Boot已经成为了一个备受欢迎的框架。它以其简化开发流程、提高效率和强大的功能而闻名使得开发人员能够更加专注于业务逻辑的实现而不必过多地关注配置问题。
然而你是否曾经好奇过Spring Boot是如何做到自动配置的为什么我们只需要简单的几行代码就能够快速搭建一个可用的应用程序在本博客中我们将深入探索Spring Boot自动配置的原理揭开其神秘面纱。
首先我们将介绍Spring Boot的核心思想和设计原则以便更好地理解自动配置的背后逻辑。接着我们将深入研究Spring Boot自动配置的机制包括条件注解、自动配置类和加载顺序等方面。通过这些详细的解析我们将揭示Spring Boot是如何根据应用程序的依赖和配置信息自动完成各种功能的初始化和配置。 一、Spring Boot是如何做到自动配置的
Spring Boot实现自动配置的核心思想是基于约定优于配置的原则。它通过一系列的机制和规则根据应用程序的依赖和配置信息自动完成各种功能的初始化和配置。
下面是Spring Boot实现自动配置的主要机制 条件注解Conditional AnnotationsSpring Boot使用条件注解来根据特定条件来决定是否应用某个配置。条件注解是基于Spring框架的Conditional注解扩展而来它可以根据一些条件判断来决定是否加载某个配置类或Bean。 自动配置类Auto-Configuration ClassesSpring Boot提供了大量的自动配置类这些类都以AutoConfiguration作为后缀命名例如DataSourceAutoConfiguration。这些自动配置类通过条件注解和配置信息来判断是否需要进行自动配置。当满足条件时自动配置类将会注册相应的Beans和配置。 配置文件Properties and YAMLSpring Boot使用属性文件application.properties或application.yml来存储应用程序的配置信息。这些配置文件中定义了各种属性和值Spring Boot可以根据这些配置信息来决定是否进行自动配置并设置相应的默认值。 启动器StartersSpring Boot提供了一系列的启动器它们是一组预定义的依赖项集合可以简化项目的构建和配置。启动器会自动引入所需的依赖并根据这些依赖来触发相应的自动配置。 条件属性Conditional PropertiesSpring Boot使用条件属性来进一步控制自动配置。条件属性允许你根据特定的属性值或环境条件来决定是否应用某个配置。
通过以上机制Spring Boot可以根据应用程序的依赖和配置信息在运行时自动进行初始化和配置以提供一套合理的默认行为。开发人员可以根据需要进行自定义配置和扩展同时也可以通过禁用某些自动配置来精确地控制应用程序的行为。
总结起来Spring Boot实现自动配置的关键在于条件注解、自动配置类、配置文件和启动器等机制的结合运用使得开发人员能够更加专注于业务逻辑的实现而不必过多地关注繁琐的配置细节。 二、为什么能简单配置
Spring Boot的设计目标之一就是简化开发流程和减少样板代码使得开发人员能够快速搭建可用的应用程序。以下是几个原因解释为什么只需要简单的几行代码就能够实现这一点 自动配置Spring Boot利用自动配置机制根据应用程序的依赖和配置信息自动完成各种功能的初始化和配置。通过默认的自动配置开发人员可以省去很多手动配置的步骤只需要引入相关的依赖并添加必要的配置属性就能够获得一个可用的应用程序。 启动器Spring Boot提供了一系列的启动器starters它们是预定义的依赖项集合。启动器会自动引入所需的依赖并触发相应的自动配置。开发人员只需要引入适当的启动器就能够获取所需的功能和依赖而不需要手动添加每个依赖的配置。 约定优于配置Spring Boot遵循约定优于配置的原则即通过约定来减少配置。它有一套默认的约定例如在标准的项目结构中放置Java类、资源文件等使用注解进行自动配置等。这些约定可以让开发人员专注于业务逻辑的实现而不必过多地关注配置细节。 开箱即用Spring Boot提供了很多开箱即用的特性和功能例如内嵌的Servlet容器、自动扫描和注册等。这些特性默认就是启用的开发人员只需要进行必要的配置即可使用它们无需手动编写大量的代码。 统一的配置方式Spring Boot采用了统一的配置方式即通过属性文件application.properties或application.yml来存储应用程序的配置信息。开发人员可以在配置文件中设置各种属性和值Spring Boot会根据这些配置信息进行自动配置并提供默认的属性值。这种统一的配置方式使得配置更加简洁明了。
总之Spring Boot通过自动配置、启动器、约定优于配置和统一的配置方式等机制使得开发人员只需要简单的几行代码就能够快速搭建一个可用的应用程序。这样的设计理念大大提高了开发效率减少了繁琐的配置工作让开发人员能够更专注于业务逻辑的实现。 三、前期准备
1、新建项目
本次案例需要新建两个项目一个是使用c3p0实现自动装配最后打包在其他项目引入使用我们自己写的自动装配。 2、导入依赖
1c3p0-spring-boot-starter dependencies!-- 添加Spring自动配置的依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-autoconfigure/artifactIdversion2.7.17/version/dependency!-- 这个依赖将配置类的属性注入到元数据中这样在 idea 中就可以提供良好的代码提示功能--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-autoconfigure-processor/artifactIdversion2.7.17/version/dependency!-- c3p0连接池 --!-- https://mvnrepository.com/artifact/c3p0/c3p0 --dependencygroupIdc3p0/groupIdartifactIdc3p0/artifactIdversion0.9.1.2/version/dependency/dependencies 这是一个Java项目的Maven依赖配置文件主要包含了Spring Boot自动配置、c3p0连接池等依赖项。Spring Boot自动配置可以让开发者更方便地构建Spring应用程序而c3p0连接池则提供了数据库连接池的功能方便应用程序与数据库进行数据交互。 2ch08 dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!-- c3p0的starter --dependencygroupIdorg.c3p0.spring.boot/groupIdartifactIdc3p0-spring-boot-starter/artifactIdversion1.0/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion${spring-boot.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/versionconfigurationsource11/sourcetarget11/targetencodingUTF-8/encoding/configuration/pluginplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion${spring-boot.version}/versionconfigurationmainClassedu.nf.ch08.Ch08Application/mainClassskiptrue/skip/configurationexecutionsexecutionidrepackage/idgoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins/build这是一个Java项目的Maven依赖配置文件主要包含了Spring Boot、c3p0连接池自己写的和MySQL驱动等依赖项。这些依赖将用于构建一个使用Spring Boot框架、c3p0连接池和MySQL数据库的Java应用程序。 在dependencies部分首先引入了spring-boot-starter依赖它是Spring Boot的核心依赖包含了Spring框架的基本功能模块。接着引入了spring-boot-starter-test依赖它是用于编写测试的依赖并且被设置为test作用域表示只在测试阶段起作用。 然后引入了c3p0-spring-boot-starter依赖它是c3p0连接池的Spring Boot集成依赖可以快速配置和使用c3p0连接池。 最后引入了mysql-connector-java依赖它是MySQL数据库的Java驱动程序。 在dependencyManagement部分引入了spring-boot-dependencies依赖用于管理Spring Boot的版本号。 在build部分定义了Maven插件的配置。maven-compiler-plugin插件用于指定编译器的版本和编码方式。spring-boot-maven-plugin插件用于打包和运行Spring Boot应用程序。 需要注意的是该配置文件中的${spring-boot.version}是一个变量实际值需要根据具体情况进行替换。 四、实现 c3p0-spring-boot-starter
1、实现配置类 C3p0DataSourceProperties ConfigurationProperties(prefix spring.datasource.c3p0)
public class C3p0DataSourceProperties {private String driverClassName;private String url;private String username;private String password;private Integer minPoolSize;private Integer maxPoolSize;private Integer initialPoolSize;private Integer maxIdleTime;public String getDriverClassName() {return driverClassName;}public void setDriverClassName(String driverClassName) {this.driverClassName driverClassName;}public String getUrl() {return url;}public void setUrl(String url) {this.url url;}public String getUsername() {return username;}public void setUsername(String username) {this.username username;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;}public Integer getMinPoolSize() {return minPoolSize;}public void setMinPoolSize(Integer minPoolSize) {this.minPoolSize minPoolSize;}public Integer getMaxPoolSize() {return maxPoolSize;}public void setMaxPoolSize(Integer maxPoolSize) {this.maxPoolSize maxPoolSize;}public Integer getInitialPoolSize() {return initialPoolSize;}public void setInitialPoolSize(Integer initialPoolSize) {this.initialPoolSize initialPoolSize;}public Integer getMaxIdleTime() {return maxIdleTime;}public void setMaxIdleTime(Integer maxIdleTime) {this.maxIdleTime maxIdleTime;}}这段代码是一个配置类用于配置C3P0数据源的属性。通过ConfigurationProperties(prefix spring.datasource.c3p0)注解将配置文件中以spring.datasource.c3p0为前缀的属性与该类的属性进行绑定。 具体来说这个配置类有以下属性 driverClassName: 数据库驱动类名url: 数据库连接URLusername: 数据库用户名password: 数据库密码minPoolSize: 连接池中的最小连接数maxPoolSize: 连接池中的最大连接数initialPoolSize: 初始化连接池时的连接数maxIdleTime: 连接在连接池中闲置的最长时间 通过提供对应的getter和setter方法可以获取和设置这些属性的值。 使用该配置类可以方便地管理和配置C3P0数据源的相关属性。在Spring Boot应用程序中可以在application.properties或application.yml配置文件中设置这些属性然后通过EnableConfigurationProperties(C3p0DataSourceProperties.class)注解将配置类生效并自动将属性值注入到其他需要使用数据源的组件中。 2、实现 C3p0DataSourceAutoConfigure Configuration
ConditionalOnClass(ComboPooledDataSource.class)
AutoConfigureBefore(DataSourceAutoConfiguration.class)
EnableConfigurationProperties(C3p0DataSourceProperties.class)
public class C3p0DataSourceAutoConfigure {private C3p0DataSourceProperties c3p0DataSourceProperties;Autowiredpublic void setC3p0DataSourceProperties(C3p0DataSourceProperties c3p0DataSourceProperties) {this.c3p0DataSourceProperties c3p0DataSourceProperties;}Bean// 这个条件注解标识当容器中存在这个bean的时候才会执行装配// ConditionalOnBean// 这个条件注解标识当容器中不存在这个bean的时候才会执行装配ConditionalOnMissingBeanpublic DataSource dataSource() throws PropertyVetoException {// 创建 c3p0 的数据源ComboPooledDataSource dataSource new ComboPooledDataSource();// 将配置属性设置到 dataSource 中dataSource.setDriverClass(c3p0DataSourceProperties.getDriverClassName());dataSource.setJdbcUrl(c3p0DataSourceProperties.getUrl());dataSource.setUser(c3p0DataSourceProperties.getUsername());dataSource.setPassword(c3p0DataSourceProperties.getPassword());dataSource.setMinPoolSize(c3p0DataSourceProperties.getMinPoolSize());dataSource.setMaxPoolSize(c3p0DataSourceProperties.getMaxPoolSize());dataSource.setInitialPoolSize(c3p0DataSourceProperties.getInitialPoolSize());dataSource.setMaxIdleTime(c3p0DataSourceProperties.getMaxIdleTime());return dataSource;}}这段代码是一个自动配置类用于将C3P0数据源配置为Spring Boot应用程序的默认数据源。 首先通过Configuration注解将该类标识为一个配置类。然后通过ConditionalOnClass(ComboPooledDataSource.class)注解当ComboPooledDataSource类存在于类路径中时才会进行自动配置。 接下来通过AutoConfigureBefore(DataSourceAutoConfiguration.class)注解保证在DataSourceAutoConfiguration类之前进行自动配置。这样可以确保C3P0数据源会覆盖默认的数据源配置。 通过EnableConfigurationProperties(C3p0DataSourceProperties.class)注解启用对C3p0DataSourceProperties类的配置属性的支持。这样在该自动配置类中就可以自动注入C3p0DataSourceProperties类的实例。 在该自动配置类中定义了一个dataSource()方法用于创建并配置C3P0数据源。通过Bean注解将该方法的返回值作为一个Spring Bean注册到容器中。 在dataSource()方法中首先创建了一个ComboPooledDataSource实例然后将C3p0DataSourceProperties类中的属性值设置到数据源中。最后返回创建的数据源。 总结起来这个自动配置类的作用是将C3P0数据源配置为Spring Boot应用程序的默认数据源并将C3p0DataSourceProperties类中的属性值应用到数据源中。这样其他使用数据源的组件就可以直接注入DataSource类型的Bean并使用C3P0数据源进行数据库访问。 3、配置META-INF下的配置文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration \org.c3p0.spring.boot.autoconfigure.C3p0DataSourceAutoConfigure 这是META-INF目录下的spring.factories文件用于配置Spring Boot自动配置的类。 在该文件中org.springframework.boot.autoconfigure.EnableAutoConfiguration是一个键后面的\表示换行而org.c3p0.spring.boot.autoconfigure.C3p0DataSourceAutoConfigure是对应的值表示需要自动配置的类是C3p0DataSourceAutoConfigure。 通过这种方式Spring Boot会在启动时自动加载并应用C3p0DataSourceAutoConfigure类中的配置。这样C3P0数据源的自动配置就会生效将C3P0作为默认的数据源配置到Spring Boot应用程序中。 4、打包 将此maven项目打包方便在后面的项目依赖此项目。 五、实现 ch08
1、配置 yml
spring:datasource:c3p0:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/psmusername: rootpassword: 123456min-pool-size: 5initial-pool-size: 5max-pool-size: 20max-idle-time: 5000 这是一个Spring Boot中配置c3p0数据源的示例。通过配置文件来设置c3p0连接池的相关属性包括驱动类名、数据库URL、用户名、密码以及连接池的最小大小、初始大小、最大大小和最大空闲时间等。 在上述配置中spring.datasource.c3p0.driver-class-name指定了MySQL数据库的驱动类名。spring.datasource.c3p0.url指定了数据库的URL。spring.datasource.c3p0.username和spring.datasource.c3p0.password分别指定了数据库的用户名和密码。 spring.datasource.c3p0.min-pool-size、spring.datasource.c3p0.initial-pool-size和spring.datasource.c3p0.max-pool-size分别指定了连接池的最小大小、初始大小和最大大小。 spring.datasource.c3p0.max-idle-time指定了连接池中连接的最大空闲时间单位为毫秒。 这些配置项可以根据实际情况进行调整以满足应用程序的需求。在应用程序启动时Spring Boot会根据这些配置信息创建并管理c3p0连接池从而实现对数据库的连接和操作。 注意这是我们刚刚自己配置的我们引入了我们自己写的c3p0的项目。 2、测试 Autowiredprivate DataSource dataSource;Testvoid contextLoads() throws SQLException {ComboPooledDataSource ds (ComboPooledDataSource) dataSource;System.out.println(ds.getConnection());System.out.println(ds.getDriverClass());System.out.println(ds.getJdbcUrl());System.out.println(ds.getMinPoolSize());System.out.println(ds.getMaxPoolSize());System.out.println(ds.getInitialPoolSize());} 这段代码是一个在Spring Boot中使用c3p0数据源的示例。 首先通过Autowired注解将DataSource对象注入到当前类中表示将由Spring容器自动创建和管理数据源。 然后在contextLoads()方法中将注入的DataSource对象强制转换为ComboPooledDataSource类型以便获取c3p0特定的属性。 接下来通过调用getConnection()方法可以获取一个数据库连接并使用System.out.println()打印出连接对象。这样可以验证数据源配置是否正确以及检查连接是否成功。 然后通过调用getDriverClass()、getJdbcUrl()、getMinPoolSize()、getMaxPoolSize()和getInitialPoolSize()等方法分别获取c3p0数据源的驱动类名、JDBC URL、最小连接池大小、最大连接池大小和初始连接池大小并通过System.out.println()打印出来。 这些操作可以帮助你验证数据源配置是否生效以及获取连接池的相关属性信息。 运行结果 六、springboot自动装配的原理是什么
Spring Boot的自动装配是基于Spring框架的依赖注入和控制反转IoC机制实现的。
自动装配的原理如下 组件扫描Spring Boot会在启动时自动扫描应用程序的包及其子包查找带有特定注解的类如Component、Service、Repository等。 隐式Bean定义当Spring Boot找到带有特定注解的类时它会隐式地将这些类解析为Bean定义即创建相应的Bean实例所需的元数据。 自动配置Spring Boot根据应用程序的依赖关系和配置信息通过条件化配置来自动决定需要创建哪些Bean。自动配置是通过使用Conditional注解进行条件判断来实现的例如判断某个类是否在类路径上、是否存在某个Bean等。 Bean创建和注入根据Bean定义和自动配置的结果Spring Boot会创建相应的Bean实例并将其注入到需要依赖的地方。这是通过依赖注入DI机制实现的可以使用Autowired、Inject或构造函数等方式进行注入。
总结起来Spring Boot的自动装配通过组件扫描、隐式Bean定义、自动配置和依赖注入等机制实现了对应用程序中各个组件的自动发现、创建和注入减少了手动配置的工作量提高了开发效率。同时Spring Boot还提供了一些默认的自动配置可以根据应用程序的需求进行定制和扩展。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/80994.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!