java spring javax.inject.provider抛出类强制转换异常

时间:2013-03-05 14:56:57

标签: java spring java-ee

我目前使用以下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。

1 个答案:

答案 0 :(得分:0)

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

这样的实例
TableInterface table = provider.get();

哪个仍会返回Proxy,但您不会在此分配上获得ClassCastException,因为代理实现了TableInterface接口。

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