Java aop:作用域代理可以与通用工厂bean一起使用吗?
我构建了一个AbstractFactoryBean实现,它可以处理泛型类型,例如:Java aop:作用域代理可以与通用工厂bean一起使用吗?,java,spring,Java,Spring,我构建了一个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() {
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;
}
公共类MyClass扩展了AbstractFactoryBean{
类类型;//在使用工厂时作为参数注入
@凌驾
受保护的类getObjectType(){
返回类型;
}
@凌驾
受保护的T createInstance(){
//创建T类型对象的一些逻辑
返回(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“scopedTarget.whateverBean”创建作用域代理:在创建代理时无法确定目标类型
基于读取,似乎作用域代理必须知道类型是什么,甚至在对象完全初始化之前也是如此。例如,发生这种情况时(试图调试问题时),我似乎无法在getObjectType()方法中打印或记录任何内容
有什么办法可以解决这个问题吗?我如何使用一个工厂来创建作用域代理,该工厂将知道它在运行时创建的bean的类型,而不是“预运行时”,它似乎正在发生这种情况