2011-08-08 112 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? 我使用Google,但第n是工作:鑄造appCtx到DefaultListableBeanFactory導致CCE,我不能改變XFactory到的FactoryBean(第三方)

回答

1

「鑄造appCtx到DefaultListableBeanFactory導致CCE」 獲取AutowireCapableBeanFactory由appCtx.getAutowireCapableBeanFactory(),然後投它來BeanDefinitionRegistry。

+0

添加某物像: 'ConfigurableBeanFactory CFB =(ConfigurableBeanFactory)applicationContext.getAutowireCapableBeanFatory();'' 如果{'' cfb.registerSingleton(intfName,(cfb.containsBean(service.getName())!)服務);' '}' 不確定它是否正常,但很可能工作 - appCtx.getBean(name)返回sth!= null,尚未完全測試。 現在我還有其他問題。我使用Spring AOP,是否有可能代理原始服務,以便它包含已在我的aop.xml中定義的所有方面? – alef

+0

'不確定是否可以'您的代碼已經直接依賴於Spring API,所以如果將來對Spring進行任何更改可能會破壞該部分(這不太可能)。這一舉措不會有很大的變化。對於aop,我查看了代碼並無法找到答案。 – Adi