-1

私は現在、次のjavax注入プロバイダーアノテーションを使用してSpring Beanを作成しています:

@Autowired
Provider<Table> provider;

私が呼び出すinitメソッドの1つで:

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>  {

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

}

init でインスタンスを作成できない理由を知っている人はいますか?

春にはルックアップメソッドを使用したメソッドインジェクションがあることは知っていますが、XMLを実際に使用したくありません。

4

1 に答える 1

0

プロバイダーから返された Bean がプロキシされるようです。Tableクラスが実装できるインターフェイスを抽出し、Provider<TableInterface>代わりに a を使用してみてください。次に、次のようなインスタンスを取得できます。

TableInterface table = provider.get();

これは引き続き を返しますが、プロキシがインターフェイスを実装しているため、この割り当てでProxyは を取得できません。ClassCastExceptionTableInterface

もう 1 つの可能性は、CGLIB でクラス プロキシを有効にすることです。この場合、インターフェイスを抽出する必要はありません。

于 2013-03-05T15:10:53.090 に答える