我目前使用以下javax注入提供程序注释创建一个spring bean:
@Autowired
Provider<Table> provider;
在我调用的一个init方法中:
Table table = provider.get();
this throws:java.lang.ClassCastException:$ Proxy127
该表配置为
@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class Table extends Furniture<
Square,
Round> {
...............
...............
}
父类是抽象的:
public abstract class Furniture<
E extends Legs,
M extends Corners> {
.............
.............
}
任何人都有任何想法为什么我无法在init上创建实例?
我知道spring使用lookup方法注入方法,但我真的不想使用XML。
答案 0 :(得分:0)
似乎提供者返回的bean被代理了。尝试提取Table
类可以实现的接口,并使用Provider<TableInterface>
代替。然后你可以获得一个像:
TableInterface table = provider.get();
哪个仍会返回Proxy
,但您不会在此分配上获得ClassCastException
,因为代理实现了TableInterface
接口。
另一种可能性是使用CGLIB启用类代理,在这种情况下,您不需要提取接口。