SpringBoot自动配置
无基础的直接看链接内容,有基础就直接顺着往下看就可以
Spring底层(自动配置)
自动配置就是@EnableXXX封装@Improt(ImportSelector的实现类)对应方法selectImoprt返回字符串数组为类名会注册为bean
而我们这个字符串数组从我们的各个auotoconfiguration依赖的里面的一个org.springframework.boot.autoconfigure.AutoConfiguration.imports或spring.factories获取
每个第三方都会在这里写上需要自动配置注册的bean,以达到统一管理的效果
参数类
是什么
比如该类
会读取properties下log开头的
log.level=xxx
就会赋值给该类的level
java
package com.example.log;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "log")
public class LogProperties {
private String level;
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
}
然后我们工具类就可以读取这个属性进行动态的自动配置
配置类为什么是核心
自动配置的核心确实是通过参数类(通常是 @ConfigurationProperties 注解的类)来读取配置文件中的属性,并根据这些属性自动进行配置和实例化相应的 Bean。
而如果一个bean没有用到这个参数类中的参数,我感觉和直接引用没什么区别
隐式注入/调用
自动配置有隐式调用和显示调用,一般我们都是隐式调用的,比如数据库连接信息的配置,我们并没有@Autowired
mybatis-config.xml
这个我不讲了,感觉就是原始的配置方式,mybatis官方提供的方式
例子详解
mybatis就是通过对应的数据源datasource先生成sqlsessionFactory
然后生成sqlsession用来执行sql语句

通过在spring配置文件写参数来进行对应的配置
这种是如何配置的呢
就是通过我们的参数类
数据源配置
java
@Configuration
@EnableTransactionManagement
@PropertySource("classpath:application.properties") // 引入配置文件
public class DataSourceConfig {
@Value("${spring.datasource.url}") // 通过 @Value 注解读取配置文件中的参数
private String dbUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(dbUrl); // 设置数据源 URL
dataSource.setUsername(username); // 设置用户名
dataSource.setPassword(password); // 设置密码
dataSource.setDriverClassName(driverClassName); // 设置驱动类名
return dataSource;
}
}
java
@Configuration
@MapperScan("com.example.mapper") // 扫描 Mapper 接口
public class MyBatisConfig {
//上一步我们已经定义了数据源,再@bean里面注入bean只要在方法参数列表写一下即可,不用手动注入
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource); // 设置数据源
factoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml")); // 设置 MyBatis 配置文件路径(这步我们按照规范写的话同包同名,这个文件应该是不用写的)
return factoryBean.getObject(); // 返回 SqlSessionFactory 实例
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory); // 配置 SqlSessionTemplate,用于执行 SQL
}
}
然后我们的Mapper要执行对应的sql语句不是吗?
我们的mybatis会生成一个Mapper实现类,依赖注入我们的sqlsession来实现我们的数据库操作
java
public class UserMapperImpl implements UserMapper {
@AutoWired//通过依赖注入实现!!!
private final SqlSession sqlSession;
public UserMapperImpl(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
@Override
public User getUserById(int id) {
return sqlSession.selectOne("com.example.mapper.UserMapper.getUserById", id); // 执行 SQL 查询
}
@Override
public int insertUser(User user) {
return sqlSession.insert("com.example.mapper.UserMapper.insertUser", user); // 执行 SQL 插入
}
}
这样就实现了自动配置(隐式的调用bean)