IOC容器注册Bean的方法
一、@Bean直接导入单个类
@Configuration
public class MyConfig {
@Bean
public Student getStudent(){
return new Student();
}
}
二、@ComponentScan默认扫描(该注解会默认扫描该类所在包下的所有配置类(添加过spring注解的类、@Controller、@Service、@Repository、@Component))
@Configuration
@ComponentScan(value = "com.xinyu.major")
public class MyConfig {
}
三、@Import快速给容器导入Bean的方式
1.@Import直接参数导入
@Import(value = {PersonA.class})
2.实现ImportSelector自定义规则实现
@Configuration
@Import(value = {MyImportSelector.class})
public class MyConfig {}
public class MyImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"com.xinyu.major.Company",
"com.xinyu.major.Member"};
}
}
3.实现ImportBeanDefinitionRegistrar获得BeanDefinitionRegistry可以手动直接往IOC容器中注入
@Configuration
@Import(value = {MyImportBeanDefinitionRegistrar.class})
public class MyConfig {}
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
/**
*
* @param importingClassMetadata 当前类的注解信息
* @param registry 完成BeanDefinition的注册
*/
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
boolean company = registry.containsBeanDefinition("com.xinyu.major.Company");
boolean member = registry.containsBeanDefinition("com.xinyu.major.Member");
if(company && member){
BeanDefinition beanDefinition = new RootBeanDefinition(User.class);
registry.registerBeanDefinition("user",beanDefinition);
}
}
}
四.FactoryBean 把需要注册的对象封装成FactoryBean
FactoryBean 负责将Bean注册到IOC的bean,BeanFactory 从IOC中获得Bean对象
@Configuration
public class MyConfig {
@Bean
public MyFactoryBean getMyFactoryBean() {
return new MyFactoryBean();
}
}
public class MyFactoryBean implements FactoryBean<Monkey> {
@Nullable
@Override
public Monkey getObject() throws Exception {
return new Monkey();
}
@Nullable
@Override
public Class<?> getObjectType() {
return Monkey.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
调用
ApplicationContext app = new AnnotationConfigApplicationContext(MyConfig.class);
Object monkey = app.getBean("getMyFactoryBean");
System.out.println(monkey);
Object monkey1 = app.getBean("&getMyFactoryBean");
System.out.println(monkey1);
Class<?> aClass = app.getBean("&getMyFactoryBean").getClass();
System.out.println(aClass);
版权声明:本文为weixin_39723539原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。