1、创建一个Spring定义的FactoryBean类:
package com.gwolf.config;
import org.springframework.beans.factory.FactoryBean;
import com.gwolf.vo.Color;
public class ColorFactoryBean implements FactoryBean<Color> {
@Override
public Color getObject() throws Exception {
return null;
}
@Override
public Class<?> getObjectType() {
return null;
}
@Override
public boolean isSingleton() {
return false;
}
}

2、FactoryBean类中的getObject()方法会返回一个java对象,这个对象会添加到容器中。

3、FactoryBean类中的isSingleton()方法标识返回的是否是一个单实例对象,如果返回true表示在容器中只会保存一份,返回false则每次获取都会创建一个新的bean。

4、在组件配置类中把这个工厂bean加入到容器中。
package com.gwolf.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ComponentConfig {
@Bean
public ColorFactoryBean colorFactoryBean() {
return new ColorFactoryBean();
}
}

5、工厂Bean获取的调用FactoryBean中getObject创建的对象:

6、要获取工厂Bean本身,需要给id前面加上一个&标识。
package com.gwolf.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.gwolf.config.ComponentConfig;
public class ComponentTest {
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(ComponentConfig.class);
@Test
public void testImport() {
String[] beanNames = applicationContext.getBeanDefinitionNames();
for(String bean : beanNames) {
System.out.println(bean);
}
Object bean = applicationContext.getBean("colorFactoryBean");
System.out.println("bean的类型:" + bean.getClass());
bean = applicationContext.getBean("&colorFactoryBean");
System.out.println("bean的类型:" + bean.getClass());
}
}
