除了可以在xml中用factory-method告诉Spring这个类是工厂类之外(详情请见另一篇博客:Spirng工厂类),还可以让该类实现FactoryBean告诉Spirng这是一个工厂类。
FactoryBean中要实现的方法:
- Object getObject() :主要方法,返回工厂类要返回的对象(工厂类的产品)
- Class getObjectType():工厂类返回对象的类型
- boolean isSingleton():返回对象是否用单例模式
至于xml中配置则完全正常配置,Spring会自动检查哪个bean实现了FactoryBean接口,然后调用该工厂类的getObject作为这次配置的bean对象。
下面工厂类可以获取指定类的指定成员变量
public class GetFieldFactory implements FactoryBean<Object>
{
private String targetClass;
private String targetField;
@Override
public boolean isSingleton() {
return false;
}
@Override
public Object getObject() throws Exception {
Class<?> clazz = Class.forName(targetClass);
Field field = clazz.getField(targetField);
return field.get(null);
}
@Override
public Class<?> getObjectType() {
try {
return Class.forName(targetClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
};
return null;
}
//省略getter,setter方法
<bean id="getField" class="com.lyx.factory.GetFieldFactory"
p:targetClass="java.util.GregorianCalendar" p:targetField="MONTH"
/>