-1

我目前使用以下 javax 注入提供程序注释创建一个 spring bean:

@Autowired
Provider<Table> provider;

在我调用的 init 方法之一中:

Table table = provider.get();

这会抛出: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>  {

    .............
    .............

}

任何人都知道为什么我无法在初始化时创建实例?

我知道 spring 使用查找方法进行方法注入,但我真的不想使用 XML。

4

1 回答 1

0

提供者返回的 bean 似乎被代理了。尝试提取Table该类可以实现的接口,并使用 aProvider<TableInterface>代替。然后你可以得到一个像这样的实例:

TableInterface table = provider.get();

仍然会返回 a Proxy,但您不会ClassCastException在此分配中获得 the ,因为代理实现了TableInterface接口。

另一种可能性是使用 CGLIB 启用类代理,在这种情况下,您不需要提取接口。

于 2013-03-05T15:10:53.090 回答