示例一:
需要将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启动流程