2011-10-25 9 views
4

SpringのBean設定ファイルで現在のアプリケーションコンテキストを参照する方法はありますか?Spring XMLのapplicationcontextの "this"リファレンス

私はこのような何かをしようとしています:

<beans 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> 

    <bean id="some-bean-name" class="com.company.SomeClass"> 
     <constructor-arg> 
      <!-- obviously this isn't right --> 
      <bean ref=#{this}/> 
     </constructor-arg> 
    </bean> 

問題はSomeClassはそのコンストラクタでのApplicationContextインスタンスを必要としていることです。 BeanをロードしているApplicationContextの参照を取得する方法はありますか?私はXMLですべての読み込みを行うことができることを知っていますが、JavaコードでBeanの読み込みを行う必要があるため、これはあまり意味がありません。

答えて

1

ApplicationContextAwareの実装を検討しましたか?それはコンストラクタには入りませんが、init()コールの前に発生し、Beanプロパティが設定された直後に発生します。通常Beanプロパティの集団後にそのようなInitializingBean.afterPropertiesSet()またはカスタム INIT-方法として、INIT コールバックの前に呼び出さ

。該当する場合、 ResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader)、 ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher) およびMessageSourceAwareの後に呼び出されます。あなたはまた、単に​​それならば春2.5以降を使用してすることができます

public class SomeClass implements ApplicationContextAware { 
    //your class definition 
    private ApplicationContext myContext; 

    public void setApplicationContext(ApplicationContext context) throws BeansException { 
     myContext = context; 
     //load beans here maybe? 
    } 
} 

public class SomeClass { 
    //your class definition 
    @Autowired 
    private ApplicationContext myContext; 
} 

もちろん、これらのいずれかを実行すると、コードがSpringに結び付けられます。

+0

この作業を行うには、XMLで行う必要がありますか?私はインターフェイスのアプローチを試して、セッターは呼ばれていないようです。 – javamonkey79

+0

'SomeClass'は' ApplicationContext'によって管理される必要があります。 xml構成またはアノテーション構成のいずれか。 –

+0

私は今、それが豆が春にロードされている場合にのみ動作します。そうでなければ、手動でセッターを呼び出さなければなりません。\ – javamonkey79

関連する問題