把Bean加入到springIoC容器
-
xml文件配置时就写即可
-
注解形式注入(全部在@Congiration主配置类中设置)
-
如果是三层组件:则配置扫描器注解扫描 + 三层对应的注解(或者@Component,不推荐,一般最好指明)
-
非三层组件:
-
配置类中写方法,上边打@Bean+返回值
-
@import注解打在主配置类上指明bean类:@Import({Apple.class,Banana.class})
-
直接编写到@Import中,并且bean的id值是全类名
-
自定义ImportSelector接口的实现类,通过selectimports方法实现(方法的返回值就是要纳入IoC容器的Bean),并且告知程序自己编写的实现类@Import({Orange.class,MyImportSelector.class})
此方式可以和方式一共用(再添加返回值没有的)
public class MyImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { return new String[ {"com.yanqun.entity.Apple","com.yanqun.entity.Banana"}; //返回值就是 要加入IOC容器的Bean的全类名 } }
- 编写ImportBeanDefinitionRegistrar接口的实现类,重写方法@Import({Orange.class,MyImportSelector.class,ImportBeanDefinitionRegistrar.class})
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { //"com.yanqun.entity.Orange" //BeanDefinition bd = new RootBeanDefinition(Orange.class) ; BeanDefinition beanDefinition = new RootBeanDefinition("com.yanqun.entity.Orange") ; registry.registerBeanDefinition("myorange", beanDefinition ); // id ,class } }
-
-
FactoryBean(工厂Bean)
- 准备bean,实现类和重写方法
- 注册bean,注册到@Bean中(通过@bean在主配置类中注册)
- 注意:需要通过&区分获取的对象是哪一个
- 不加&,获取的是最内部真实的Apple
- 如果加了&,获取的 是FacotryBean
-
-