起步依赖
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>当引入起步依赖后,Maven 会根据起步依赖进行依赖传递,把 Web 开发相关的依赖都传递进来
自动配置
[!quote] 自动配置 自动配置 就是 Spring 容器启动后,会自动将一些配置类,Bean 对象放入到 IOC 容器中,我们就可以直接使用
自定义依赖导入
依赖包项目
项目结构
- DependencyTool
- src
- main
- java
- com.example
EnableHeaderConfig用来给主项目导入整个依赖包HeaderConfigHeaderGeneratorHeaderParserMyImportSelectorTokenParser
- com.example
- java
- main
- src
java
// 定义一个注解 EnableHeaderConfig
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(MyImportSelector.class) // 指定到底要导入哪些配置类
public @interface EnableHeaderConfig {}主项目
java
// 启动类
@EnableHeaderConfig // 引入注解
@SpringBootApplication
public class SpringAopApplication {
public static void main(String[] args) {
SpringApplication.run(SpringAopApplication.class, args);
}
}通过添加依赖包中的注解,即可将依赖包中的对象加入到 IOC 容器,从而引入项目
@SpringBootApplication
@SpringBootApplication@Target({ElementType.TYPE})源注解,用于描述注解的使用范围【可以指定注解可以用于类、方法、字段……】@Retention(RetentionPolicy.RUNTIME)源注解,用于描述注解的生命周期【可以指定注解在编译时、运行时或两者都保留】@Documented源注解,用于描述注解是否应该包含在 Javadoc 中@Inherited源注解,用于描述注解是否应该继承到子类中@SpringBootConfiguration表示是一个配置类【所以可以在启动类里配置第三方 Bean,不过不推荐】@EnableAutoConfiguration@AutoConfigurationPackage@Import({AutoConfigurationImportSelector.class})导入了一个ImportSelector接口的实现类,ImportSelector接口的其中一个方法的返回值是一个String[],里面是导入到 IOC 容器中的类- 最终会跟踪到一个文件
org.springframework.boot.autoconfigure.AutoConfiguration.imports里面包含了所有的配置类
- 最终会跟踪到一个文件
@ComponentScan(……)表示扫描包的范围【默认是扫描当前包及其子包】
条件装配
org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件里所有的配置类基本都不是一次性就直接装配到 IOC 容器中的,都是条件装配的
条件装配注释树
@Conditional条件装配的父注解【可以加在类,方法上】@ConditionalOnClass判断环境中是否有对应的字节码文件,有才注册 Bean@ConditionalOnMissingBean判断环境中是否没有对应的 Bean,没有才注册 Bean;如果有,则用我们自己生成的 Bean@ConditionalOnProperty判断环境中是否有对应的属性名,属性值- ……
@ConditionalOnClass
当引入了 jwt 依赖后,项目中就会存在这个类,那么该 Bean 就会装配到 IOC 容器;
java
@Bean
// 此处是jwt依赖里的类
@ConditionalOnClass(name = io.jsonwebtoken.Jwts)
public SSSBean getSSSBean {
return new SSSBean();
}@ConditionalOnProperty
当在配置文件 application.yml 中,有指定的 name 和 value ,则装配 Bean
yml
status: yesjava
@Bean
// 此处是jwt依赖里的类
@ConditionalOnProperty(name = “status ”, value = “yes”)
public SSSBean getSSSBean {
return new SSSBean();
}自定义起步依赖
- SpringBoot 官方整合的起步依赖:
spring-boot-starter-…… - 自定义的起步依赖:
……-spring-boot-starter
自定义起步依赖时,我们会定义两个包【依赖管理包(把自动配置包里的配置类引入到 pom.xml 中,然后被项目统一引入),自动配置包(各种的配置类)】 

依赖管理包
pom.xml中有一项依赖:
xml
// 引入自动配置包
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-autoconfigure</artifactId>
</dependency>自动配置包
- org.springframework.boot.autoconfigure.AutoConfiguration.imports
imports
// 里面写的是所有配置类的全类名
org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfiguration
org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration- MybatisAutoConfiguration
java
@Configuration(
proxyBeanMethods = false
)
…………各种条件装配
// 导入Mybatis所需的配置信息
@EnableConfigurationProperties({MybatisProperties.class})
……
public class MybatisAutoConfiguration implements InitializingBean {
// 注册各种Bean
……
}