一.先新建一个ColorBeanFactory实现方法FactoryBean,并实现其方法
package com.Bean; import org.springframework.beans.factory.FactoryBean; //创建Spring工厂FactoryBean public class ColorBeanFactory implements FactoryBean<Color> { //返回一个color对象,这个对象会添加到容器中 public Color getObject() throws Exception { System.out.println("ColorBeanFactory..."); return new Color(); } //返回对象的类型 public Class<?> getObjectType() { return Color.class; } //是否位单例模式 true位单实例 public boolean isSingleton() { return true; } }
其中三个方法分别为
1.//返回一个color对象这个对象会添加到容器中
public Color getObject() throws Exception
2.//返回对象的类型
public Class<?> getObjectType()
3.//是否位单例模式 true位单实例
public boolean isSingleton()
2.1 新建一个Config类,用@Imort注解添加MyImportBeanDefinitionRegistar类
package com.Config; import com.Bean.Color; import com.Bean.ColorBeanFactory; import com.Bean.Person; import com.Conditional.Linux; import com.Conditional.MyImportBeanDefinitionRegistar; import com.Conditional.MyImportSelect; import com.Conditional.windows; import org.springframework.context.annotation.*; @Import({ MyImportBeanDefinitionRegistar.class}) //ImportBeanDefinitionRegistar: public class MainConfig {@Bean("ColorBeanFactory") public ColorBeanFactory colorBeanFactory(){ return new ColorBeanFactory(); } }
2.2创建测试类
import com.Bean.Person; import com.Config.MainConfig; import com.Config.config; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; public class TestP { AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class); @Test public void testImport() { printBean(applicationContext); } private void printBean(AnnotationConfigApplicationContext annotationConfigApplicationContext) { String[] beanDefinitionNames = annotationConfigApplicationContext.getBeanDefinitionNames(); for (String name : beanDefinitionNames) { System.out.println(name); } }}
2.3 运行后
ColorFactoryBean已经被添加到IOC容器中
现在我们来解析一下源码!!
在测试代码中添加一些代码,运行
@Test public void testImport() { printBean(applicationContext); //获取ColorBeanFactory Object colorBeanFactory1 = applicationContext.getBean("ColorBeanFactory"); Object colorBeanFactory2 = applicationContext.getBean("ColorBeanFactory"); //获取colorBeanFactory1 类名 System.out.println("bean类型为"+colorBeanFactory1.getClass()); //测试是否为单例模式 System.out.println(colorBeanFactory1==colorBeanFactory2); }