0
点赞
收藏
分享

微信扫一扫

SpringBoot:自动配置原理

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

示例一:

需要将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 条评论