Search code examples
springjavabeansrmi

Spring 3.0 RmiProxyFactoryBean: how to change serviceUrl at runtime?


I have a bean definition like this:

    <bean id="myService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
    <property name="serviceInterface" value="org.myapp.MyService"/>
    <property name="serviceUrl" value="rmi://localhost:1099/myService"/>
</bean>

I retrieve the service bean in this way:

    ApplicationContext context = new ClassPathXmlApplicationContext("classpath:rmi-client-config.xml");
    MyService myService = context.getBean("myService", MyService.class);

Of course it returns an Instance of "MyService" impl and not RmiProxyFactoryBean.

So how can I change "serviceUrl" parameter using the xml definition above and not manually instancing RmiProxyFactoryBean?


Solution

  • To get the FactoryBean instance instead of the bean created by the factory, use the BeanFactory.FACTORY_BEAN_PREFIX. ie

    RmiProxyFactoryBean rpfb = (RmiProxyFactoryBean) contex.getBean("&myService");