我构建了一个AbstractFactoryBean实现,它适用于泛型类型,例如:
public class MyClass<T> extends AbstractFactoryBean<T> {
Class<T> type; // this is injected as a parameter when the factory is used
@Override
protected Class<?> getObjectType() {
return type;
}
@Override
protected T createInstance() {
// some logic to create object of type T
return (T) someObjectResult;
}
这可以很好地创建任何不同类型的bean。例如:
<bean id="whateverBean" class="MyClass" p:type="WhateverBeanClass" />
但是,当我尝试使用它创建一个bean时,
<bean id="whateverBean" class="MyClass" p:type="WhateverBeanClass" >
<aop:scoped-proxy/>
</bean>
失败并显示错误由以下引起:java.lang.IllegalStateException:无法为bean创建作用域代理&scansTarget.whateverBean&#39;:在创建代理时无法确定目标类型。
基于阅读,看起来scoped-proxy似乎必须知道类型是什么,甚至在对象完全初始化之前。例如,当发生这种情况时(试图调试问题),我似乎无法在getObjectType()方法中打印或记录任何内容。
这有什么办法吗?我如何使用工厂创建范围代理,该工厂将知道它在运行时创建的bean的类型,但不是&#34;运行前&#34;这是什么时候发生的?