-
在xml文件中添加包扫描,然后在需要注册的组件上标注注解
@Controller @Service @Repository @Component
-
使用@Bean 注解导入第三方包里的组件
@Bean("win") public Student student03(){ return new Student("window", 100); }
- 注解@Import,快速给容器中导入一个组件
看一下这个注解的源码,参数是一个Class类型的数组,分为以下三种情况
1). @Import(要导入到容器中的组件);容器中就会自动注册这个组件,id默认是全类名
2).参数传入ImportSelector的实现类:返回需要导入的组件的全类名数组;
public class MyImportSelector implements ImportSelector { //方法的返回值就是要导入容器中的组件, //参数表示当前标注@Import注解的类的所有注解信息 public String[] selectImports(AnnotationMetadata importingClassMetadata) { //方法不要返回null,会报空指针异常 return new String[]{"com.xw.bean.Share"}; } }
3). ImportBeanDefinitionRegistrar:实现这个接口,手动注册bean到容器中
public class NyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
boolean beanDefinition = registry.containsBeanDefinition("win");
if (beanDefinition) {
//Register是自己定义的类
RootBeanDefinition definition = new RootBeanDefinition(Register.class);
registry.registerBeanDefinition("registBean", definition);
}
}
}
4. 使用Spring提供的 FactoryBean(工厂Bean)
1)、默认获取到的是工厂bean调用getObject创建的对象
2)、要获取工厂Bean本身,我们需要给id前面加一个&
&colorFactoryBean
public class ColorFactory implements FactoryBean<Color>{ //返回一个对象,这个对象会添加到容器中 public Color getObject() throws Exception { System.out.println("Object..."); return new Color(); } public Class<?> getObjectType() { return Color.class; } //判断是单例吗 public boolean isSingleton() { return true; } }