我在ProxyFactoryBean
班级面临问题,
我们希望获得targetBean
的{{1}}的班级名称。
当我们在ProxyFactoryBean
上调用getType
给出bean名称时,它总是返回null。
我们的Java代码是
BeanFactory
我们的配置文件如下:
public class TestSpring {
public static void main(String args[]){
TestSpring ts = new TestSpring();
ts.process();
}
private void process() {
BeanFactory factory = new XmlBeanFactory(new FileSystemResource("E:\\beans.xml"));
Class c = factory.getType("scor.imagedev.action.imageDevServerTaskActions");
System.out.println(c);
}
}
我想在此处添加的其他一些内容。
<bean id="scor.actionProxyTemplate" class="org.springframework.aop.framework.ProxyFactoryBean" abstract="true" >
<property name="proxyTargetClass" value="true" />
</bean>
<bean id="scor.imagedev.action.imageDevServerTaskActions" parent="scor.actionProxyTemplate" scope="prototype">
<property name="target">
<bean class="test.spring.Foo"/>
</property>
</bean>
。这是我们的基础框架拨打电话。我们无法改变我们的基础框架。BeanFactory.getType(<beanName>)
会解决问题吗?我试了但是没用。可能是我错误地使用了它此致 ANKIT
答案 0 :(得分:0)
文档说如果类型不可确定,该方法将返回null
。我找不到这意味着什么的参考,但鉴于症状,我认为由于原型范围,它是不可确定的。 (bean存在,因为否则会抛出异常)
查看源代码后,我没有看到返回null
的原因 - 如果没有单例,则查询bean定义。我可以建议尝试暂时获得弹簧2.5.6(或3.0.x)并查看问题是否可以复制或修复。
答案 1 :(得分:0)
我遇到了同样的问题,在调试时发现,AbstractBeanFactory中的getTypeForFactoryBean函数运行不正常。此函数为protoType bean返回NULL。
/**
* Determine the bean type for the given FactoryBean definition, as far as possible.
* Only called if there is no singleton instance registered for the target bean already.
* <p>The default implementation creates the FactoryBean via <code>getBean</code>
* to call its <code>getObjectType</code> method. Subclasses are encouraged to optimize
/
protected Class getTypeForFactoryBean(String beanName, RootBeanDefinition mbd) {
if (!mbd.isSingleton()) {
return null;
}
try {
FactoryBean factoryBean = (FactoryBean) getBean(FACTORY_BEAN_PREFIX + beanName);
return getTypeForFactoryBean(factoryBean);
}
catch (BeanCreationException ex) {
// Can only happen when getting a FactoryBean.
logger.debug("Ignoring bean creation exception on FactoryBean type check", ex);
return null;
}
}
理想情况下,上面的函数应该在ProxyFactoryInstance上调用getObjectType,但是由于首先检查上面的单例函数返回NULL。