0
点赞
收藏
分享

微信扫一扫

SpringBoot:自动配置原理

人间四月天i 2022-01-07 阅读 78

示例一:

需要将jdbc.properties文件的信息装配到数据源对象中,并且将对象放入ioc容器中

使用的到的注解

注解名称

具体功能
@Configuration定义为Spring配置类
@PropertySource指定资源文件读取的位置
@Value将外部的数据动态注入到bean中,可以使用el表达式

创建JdbcConfig

@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource getDataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
druidDataSource.setDriverClassName(driver);
return druidDataSource;
}
}

控制层代码

从ioc中获取DataSource对象,进行断点调试,可以查看数据使用成功注入

示例二:

@Value只能一个一个的注入,实在不方便,所以我们要将数据封装成一个对象,再将对象进入到JdbcConfig中

使用到的注解

注解名称具体功能
@ConfigurationProperties从application配置文件中获取参数项
@EnableConfigurationProperties让使用了 @ConfigurationProperties 注解的类生效,并且将该类注入到 IOC 容器中,交由 IOC 容器进行管理

编写JdbcProperties类:用于封装application的参数项

@ConfigurationProperties(prefix = "jdbc")
@Data
public class JdbcProperties {
private String driver;
private String url;
private String username;
private String password;
}

代码分析:将application中前缀为“jdbc”的参数项封装为JdbcProperties

编写JdbcConfig

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {
@Bean
public DataSource getDataSource(JdbcProperties jdbcProperties){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(jdbcProperties.getDriver());
druidDataSource.setPassword(jdbcProperties.getPassword());
druidDataSource.setUsername(jdbcProperties.getUsername());
druidDataSource.setUrl(jdbcProperties.getUrl());
return druidDataSource;
}
}

 代码分析:获取JdbcProperties类的数据,创建Bean对象

该方式也是SpringBoot框架实现的主要方式

示例三:简化代码,省去JdbcProperties

编写JdbcConfig

@Configuration
public class JdbcConfig {
@Bean @ConfigurationProperties(prefix = "jdbc")
public DataSource getDataSource(){

return new DruidDataSource();
}
}

代码分析:将appcliation中前缀为“jdbc”的参数项封装进DruidDataSouorce对象中。

这种方法的使用前提,配置文件的参数值必须和所需封装类的setter一一对应。

自动配置原理

springboot主启动类

@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}

}

@SpringBootApplication:标明该类是springboot的启动类

追源码-

@SpringBootConfiguration:配置类
@EnableAutoConfiguration:自动装配

追源码-@EnableAutoConfiguration-AutoConfigurationImportSelector

可以得知 SpringBoot在启动时一定会加载 META-INF/spring.factories

SpringBoot启动流程

 

举报

相关推荐

0 条评论