Spring IOC bean的装载:
xml
Configuration
enable
Spring 的 动态Bean的装载
ImportSelector: DeferredImportSelector
Registator:ImportBeanDefinitionRegistrar
一. 自定义spirngBoot批量装载bean
1.自定义一个redisTemplate和mybatis的sqlSessionFactory类
2.分别创建2个Configuration类负责装载2个类
在 spring3.x之后用@Configuration装载bean,之前版本用applicationContext.xml配置bean
@Configuration
public class RedisConfigration {
@Bean
public TestRedisTemplate getRedisTemplate(){
return new TestRedisTemplate();
}
}
@Configuration
public class MybatisConfiguration {
@Bean
public SqlSessionFactory getSqlSessionFactory(){
return new SqlSessionFactory();
}
}
3.实现ImportSelector接口进行批量装配
public class DefineImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return new String[]{
SqlSessionFactory.class.getName(), TestRedisTemplate.class.getName()
} ;
}
}
4.创建 EnableConfiguration 注解,使用@Import导入DefineImportSelector
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(DefineImportSelector.class)
public @interface EnableConfiguration {
}
5.在启动处加上 @EnableConfiguration
@EnableConfiguration
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext ca =SpringApplication.run(DemoApplication.class, args);
System.out.println(ca.getBean(TestRedisTemplate.class));
System.out.println(ca.getBean(SqlSessionFactory.class));
}
}
6.启动测试,2个类已经加载到IOC容器,并且可以 获取实例
二. spingBoot 源码 批量加载bean到IOC容器
- @SpringBootApplication
2.@EnableAutoConfiguration
3.@Import(AutoConfigurationImportSelector.class)
4.实现ImportSelector接口