2011-08-08 9 views
1

私はjava 1.4とspring 2.5を使用しているプロジェクトを持っています。 いくつかのサービスを提供するサードパーティライブラリを使用しています。スプリングを手動で追加する

class XFactory { 
    Object getService(String name); 
} 

ここで、nameはサービスのインターフェイスの名前であり、実装は実装を返します。 私はこのクラスを拡張し、春の豆として結果を登録したい:

class YFactory extends XFactory implements ApplicationContextAware { 

    private ApplicationContext applicationContext; 

    public void setApplicationContext(ApplicationContext applicationContext) throws  BeansException { 
      this.applicationContext = applicationContext; 
    } 

    Object getService(String name) { 
      Object service = super.getService(name); 
      registerBean(applicationContext, name, service); 
      return service; 
    } 

} 

registerBeanを実装する方法は? 私はグーグルましたが、n番目が働いていた:DefaultListableBeanFactoryはCCEの原因にappCtxをキャストし、私はFactoryBeanのにXFactoryを変更カント(サードパーティ)

答えて

1

appCtx.getAutowireCapableBeanFactoryによって 取得AutowireCapableBeanFactory「DefaultListableBeanFactoryにappCtxをキャストがCCEの原因となる」()、その後、キャストそれはBeanDefinitionRegistryへ。

+0

追加さSTH等: 'ConfigurableBeanFactory CFB =(ConfigurableBeanFactory)applicationContext.getAutowireCapableBeanFatory();' ' なら{' ' cfb.registerSingleton(intfName、(cfb.containsBean(service.getName())!)サービス); '}' これは問題ないとは確信していますが、うまく動作します。 - appCtx.getBean(name)はsth!= nullを返します。まだ完全にテストされていません。 そして今私は別の問題があります。私はSpring AOPを使用しています。オリジナルのサービスをプロキシすることが可能なので、すでにaop.xmlで定義されているすべての側面が含まれていますか? – alef

+0

'OKかどうかわからない'あなたのコードは既にSpring APIに直接依存しているため、将来Springを変更するとその部分が壊れる可能性があります。この動きは大きな違いはありません。 AOPのために、私はコードを見て答えを見つけることができませんでした。 – Adi

関連する問題