springbean的加载控制
1.通过improtselector接口控制
根据任意条件确认是否加载bean
public class MyImportSelector implements ImportSelector {@ @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { try { Class <? > clazz = Class.forName("com.itheima.ebean.Mouse"); if (clazz != null) { return new String[] { "com.itheima.bean.Cat" }; } } catch (ClassNotFoundException e) { return new String[0]; } return null; } }
2.使用@Conditional注解的派生注解设置各种组合条件控制bean的加载
public class SpringConfig { @Bean @ConditionalOnClass(Mouse.class) public Cat tom() { return new Cat(); } } //未匹配指定类 public class SpringConfig { @Bean @ConditionalOnClass(Mouse.class) @ConditionalOnMissingClass("com.itheima.bean.Wolf") public Cat tom() { return new Cat(); } } //匹配指定类型的bean @Import(Mouse.class) public class SpringConfig { @Bean @ConditionalOnBean(Mouse.class) public Cat tom() { return new Cat(); } }
@Import(Mouse.class)
public class SpringConfig {
@Bean
@ConditionalOnBean(name = "com.itheima.bean.Mouse")
public Cat tom() {
return new Cat();
}
}