“Spring Boot @Conditional 条件装配”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
第1行: | 第1行: | ||
https://www.bilibili.com/video/BV19K4y1L7MT/?p=10 | https://www.bilibili.com/video/BV19K4y1L7MT/?p=10 | ||
− | @Conditional 指定满足指定条件,才会将组件装配到容器中,IDEA | + | @Conditional 指定满足指定条件,才会将组件装配到容器中,IDEA 中选中 Conditional,按 F4 查看子类 |
[[文件:和 @Conditional 相关的注解.png|缩略图|598x598像素|替代=|无]] | [[文件:和 @Conditional 相关的注解.png|缩略图|598x598像素|替代=|无]] | ||
第32行: | 第32行: | ||
=== 测试使用 @ConditionalOnBean 进行条件装配 === | === 测试使用 @ConditionalOnBean 进行条件装配 === | ||
+ | 修改 MyConfig,取消组件 tom 的装配<syntaxhighlight lang="java"> | ||
+ | // @Bean("tom") | ||
+ | </syntaxhighlight><syntaxhighlight lang="java"> | ||
+ | @SpringBootApplication(scanBasePackages = "io.github.jihch") | ||
+ | public class MainApplication { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | //1、返回 IOC 容器 | ||
+ | ConfigurableApplicationContext context = SpringApplication.run(MainApplication.class, args); | ||
+ | |||
+ | //2、查看容器里面的组件 | ||
+ | String[] beanDefinitionNames = context.getBeanDefinitionNames(); | ||
+ | Arrays.sort(beanDefinitionNames); | ||
+ | for (String name : beanDefinitionNames) { | ||
+ | System.out.println(name); | ||
+ | } | ||
+ | |||
+ | boolean tom = context.containsBean("tom"); | ||
+ | System.out.println("容器中 tom 组件:" + tom); | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight><syntaxhighlight lang="console"> | ||
+ | …… | ||
+ | 容器中 tom 组件:false | ||
+ | </syntaxhighlight> |
2023年2月12日 (日) 12:46的版本
https://www.bilibili.com/video/BV19K4y1L7MT/?p=10
@Conditional 指定满足指定条件,才会将组件装配到容器中,IDEA 中选中 Conditional,按 F4 查看子类
@ConditionalOnBean
容器中存在指定类的组件的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnMissingBean
容器中不存在指定类组件的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnClass
当 classpath 中有指定类的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnMissingClass
当 classpath 中有没有指定类的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnResource
当 classpath 中存在指定资源的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnJava
当运行环境的 Java 版本号满足指定条件的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnWebApplication
当是一个 Web 应用的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnNotWebApplication
当不是一个 Web 应用的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnSingleCandidate
表示当指定Bean在容器中只有一个,或者虽然有多个但是指定首选Bean(primary)的时候
……
测试使用 @ConditionalOnBean 进行条件装配
修改 MyConfig,取消组件 tom 的装配
// @Bean("tom")
@SpringBootApplication(scanBasePackages = "io.github.jihch")
public class MainApplication {
public static void main(String[] args) {
//1、返回 IOC 容器
ConfigurableApplicationContext context = SpringApplication.run(MainApplication.class, args);
//2、查看容器里面的组件
String[] beanDefinitionNames = context.getBeanDefinitionNames();
Arrays.sort(beanDefinitionNames);
for (String name : beanDefinitionNames) {
System.out.println(name);
}
boolean tom = context.containsBean("tom");
System.out.println("容器中 tom 组件:" + tom);
}
}
……
容器中 tom 组件:false