@Conditional():可以实现满足条件(例如:在某个环境下不装载,或者不满足某个条件的时候不装载,或者已经装置过了,不重复装载)才会加载bean到ioc容器
注意这是spring的注解
public class WzxCondition implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return false;
}
}
@Configuration
public class SpringConfiguration {
@Conditional(WzxCondition.class)
@Bean
public DemoService demoService(){
return new DemoService();
}
}
public class DemoService {
}
public class ConditionMain {
public static void main(String[] args) {
ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);
System.out.println(ac.getBean(DemoService.class));
}
}
spring IOC Bean的装载
1、xml 2、configration 3、 Enable
springBoot Bean的动态加载
public class WzxDefineImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
//动态导入bean,告诉spring俩个配置类的位置
//这里提供了starter组件加载配置类的方案,spring规定所有第三方组件配置类位置信息
//只要放在classpath:META-INF/spring.factories文件中,springboot会自动扫
// 描这个配置文件,从而实现springboot动态加载配置信息
return new String[]{MybatisConfiguration.class.getName(), RedisConfiguration.class.getName()};
}
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(WzxDefineImportSelector.class)
public @interface WzxEnableConfiguration {
}
public class MybatisConfiguration {
}
public class RedisConfiguration {
}
@WzxEnableConfiguration
@SpringBootApplication
public class SpringbootDemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext ca = SpringApplication.run(SpringbootDemoApplication.class, args);
System.out.println(ca.getBean(MybatisConfiguration.class));
}
运行结果:
com.wzx.example.demo.MybatisConfiguration@135606db
Process finished with exit code 0
网友评论