- 實(shí)現(xiàn)FactoryBean 接口
public class ColorFactoryBean implements FactoryBean {
/**
* 返回一個(gè)Color 對(duì)象空繁, 這個(gè)對(duì)象會(huì)添加到容器中
* @return
* @throws Exception
*/
@Override
public Object getObject() throws Exception {
return new Color();
}
@Override
public Class<?> getObjectType() {
return Color.class;
}
/**
* 控制是否返回單實(shí)例脖卖,返回true 是單實(shí)例
*
* @return
*/
@Override
public boolean isSingleton() {
return true;
}
}
isSingleton() 方法返回 true 表示該bean 在容器中是單實(shí)例存在的袱吆,反之亦然
- 測(cè)試代碼
@Test
public void testFactoryBean(){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig2.class);
Object factroyBean = applicationContext.getBean("colorFactoryBean");
System.out.println(factroyBean.getClass());
Map<String, Color> beansOfType = applicationContext.getBeansOfType(Color.class);
System.out.println(beansOfType);
//如果想獲取工廠bean的本身
Object bean = applicationContext.getBean("&colorFactoryBean");
System.out.println(bean);
}
- 測(cè)試結(jié)果
class com.spring.annotation.bean.Color
{com.spring.annotation.bean.Color=com.spring.annotation.bean.Color@327b636c, colorFactoryBean=com.spring.annotation.bean.Color@45dd4eda}
com.spring.annotation.bean.ColorFactoryBean@60611244
Process finished with exit code 0
注意: 雖然我們按照bean的名字獲取bean,applicationContext.getBean("colorFactoryBean"); 但實(shí)際上容器中存在的是工廠返回的baen Color
如果我們想獲取工廠bean的本身 Object bean = applicationContext.getBean("&colorFactoryBean");