Java ProxyFactoryBean为目标类返回空类对象
我在Java ProxyFactoryBean为目标类返回空类对象,java,spring,Java,Spring,我在ProxyFactoryBean类中面临问题 我们想要得到ProxyFactoryBean的targetBean的类名 当我们调用BeanFactory上的getType并给出bean名称时,它总是以null返回 我们的Java代码是 public class TestSpring { public static void main(String args[]){ TestSpring ts = new TestSpring(); ts.process();
ProxyFactoryBean
类中面临问题
我们想要得到ProxyFactoryBean
的targetBean
的类名
当我们调用BeanFactory
上的getType
并给出bean名称时,它总是以null返回
我们的Java代码是
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()
。这是我们打电话的基本框架。我们不能改变我们的基本框架targetSource
能解决这个问题吗?我试过了,但没用。可能是我用错了吗Ankit文档说明,如果类型不可确定,则该方法返回
null
。我找不到关于这意味着什么的参考资料,但考虑到这些症状,我认为这是不可确定的,因为原型的范围。(bean存在,否则将引发异常)
在查看了源代码之后,我看不到返回
null
的原因-如果没有单例,则参考bean定义。我的建议是尝试暂时获取spring 2.5.6(或3.0.x),看看这个问题是否可以复制或修复。我面临同样的问题,在调试时发现AbstractBeanFactory中的getTypeForFactoryBean函数工作不正常。此函数为原型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,但由于对singleton的第一次检查,上述函数返回NULL 谢谢你的回复。我试过2.5.6和3.0。我得到了同样的结果。我确实调试了Spring源代码。我觉得这里有问题。对于我的案例,调用将进入AbstractAutowireCapableBeanFactory.getNonSingletonFactoryBeanForType检查。在这里,它创建了一个基本的ProxyFactoryBean类,没有注入任何属性。创建此对象后,将调用工厂bean的getObjectType。这里,它正在寻找targetClass来获取对象类型。但由于targetClass没有被注入,它返回null。@Ankit将其报告为bug。他们会验证它并提供更多的见解。谢谢。我已将问题记录在JIRA中