结论先行
先定义一个工厂bean(实现FactoryBean接口及其相关方法),并注册到配置类中,即可自定义注册组件
从容器中直接根据name获取工厂bean返回的是其getObject()方法返回的类型,要想获取工厂bean本身需要在名字前加&
FactoryBean子类
package com.ouyangxizhu.factorybean;
import com.ouyangxizhu.bean.Color;
import org.springframework.beans.factory.FactoryBean;
//创建一个Spring定义的FactoryBean
public class ColorFactoryBean implements FactoryBean<Color> {
/**
* 返回一个Color对象,这个对象会添加到容器中
* 调用这个方法注册bean
* @return
* @throws Exception
*/
@Override
public Color getObject() throws Exception {
// TODO Auto-generated method stub
System.out.println("ColorFactoryBean...getObject...");
return new Color();
}
@Override
public Class<?> getObjectType() {
// TODO Auto-generated method stub
return Color.class;
}
//是单例?
//true:这个bean是单实例,在容器中保存一份
//false:多实例,每次获取都会创建一个新的bean;
@Override
public boolean isSingleton() {
// TODO Auto-generated method stub
return true;
}
}
配置类
package com.ouyangxizhu.config;