Spring组件注册 (3)

测试方法:

@Test public void testImport() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(MainConfig2.class); String[] beanNamesForType = ac.getBeanDefinitionNames(); for (String p:beanNamesForType) { System.out.println(p); } }

运行结果:逻辑判断Blue存在所以rainbow被注册了进来

mainConfig2 com.eric.bean.Blue bill person2 rainbow 使用FactoryBean注册组件

使用spring提供的FactoryBean(工厂Bean)

创建一个ColorFactoryBean实现FactoryBean接口:

//创建一个Spring定义的FactoryBean public class ColorFactoryBean implements FactoryBean<Color> { /** * 返回一个Color对象,这个对象会添加到容器中 * @return * @throws Exception */ @Override public Color getObject() throws Exception { System.out.println("ColorFactoryBean=========getObject====="); return new Color(); } /** * 返回的bean类型 * @return */ @Override public Class<Color> getObjectType() { return Color.class; } /** * 是否单例 * 返回true代表是单实例,在容器中保存一份 * false是多实例,每次获取都会创建一个新的bean * @return */ @Override public boolean isSingleton() { return true; } }

配置类里注册该工厂bean

@Configuration public class MainConfig2 { @Bean public ColorFactoryBean colorFactoryBean(){ return new ColorFactoryBean(); } }

测试方法:

@Test public void testFactoryBean() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(MainConfig2.class); //工厂bean获取的是调用getObject()方法创建的对象 Object bean1 = ac.getBean("colorFactoryBean"); Object bean2 = ac.getBean("colorFactoryBean"); System.out.println("bean的类型:"+bean1.getClass()); //单实例返回true 多实例返回false System.out.println(bean1 == bean2); //默认获取到的是工厂bean调用getObejct创建的对象 //要获取工厂bean本身,我们需要给id前面加一个&标识 Object bean3 = ac.getBean("&colorFactoryBean"); System.out.println("bean3的类型:"+bean3.getClass()); }

运行结果: 单实例获取到的是相同的bean,加&之后获取到的bean为ColorFactoryBean

ColorFactoryBean=========getObject===== bean的类型:class com.eric.bean.Color true bean3的类型:class com.eric.condition.ColorFactoryBean 总结

给容器中注册组件:

包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)

@Bean 导入的第三方包里面的组件

@Import 快速给容器中导入一个组件

@Import(要导入到容器中的组件):容器中就会自动注册这个组件,id默认是全类名

@ImportSelector 返回需要导入的组件的全类名数组

@ImportBeanDefinitionRegistrar 手动注册bean到容器中

使用Spring提供的FactoryBean(工厂Bean)

默认获取到的是工厂bean调用getObject方法创建的对象

要获取工厂Bean本身,我们需要给id前面加一个&

ok,组件注册完结,撒花。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsfsgj.html