Link to Spring Singlets created in parent context from child context

It's hard to think of a title for this! I have a bean that is initialized in a spring container. It loads classes that also create objects from files using spring class loaders. Some of these objects may have dependencies on expensive objects, and I would like these objects to be initialized in the parent object. Well, I can’t explain in words like this a simplified example:

public class MainLoader {
    public static void main(String[] args) {
        XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("top-context.xml"));

        ChildLoader childLoader = (ChildLoader)beanFactory.getBean("childLoader");

        childLoader.loadChildAndDoSomething("message1.xml");
        childLoader.loadChildAndDoSomething("message2.xml");        
    }
}

public class ChildLoader {

    public void loadChildAndDoSomething(String childContextfile){       
        XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource(childContextfile));
        ClassThatDoesStuff classThatDoesStuff = (ClassThatDoesStuff)beanFactory.getBean("classThatDoesStuff");  
        classThatDoesStuff.saySomething();
    }

}

public class ClassThatDoesStuff {
private ReallyExpensiveService reallyExpensiveService;  
private String messageStart;

public void saySomething(){
    System.out.println(messageStart + reallyExpensiveService.getName());
}

    // .. field setters removed for brevity
}

public class ReallyExpensiveService {
public String getName(){
    return "Joe";
}
}

The files contain the following beans:

top context.xml:

<bean id="childLoader" class="com.mark.test.ChildLoader" />

message1.xml (message2.xml looks like):

<bean id="classThatDoesStuff" class="com.mark.test.ClassThatDoesStuff">
    <property name="messageStart" value = "Hello! " />  
    <property name ="reallyExpensiveService" ref="theExpensiveserviceReference" />  
</bean>
<bean id="theExpensiveserviceReference" class="com.mark.test.ReallyExpensiveService" />

When they start, you get the expected:

Hello! Joe
Goodbye! Joe

, "ReallyExpensiveService" spring . . , ClassThatDoesStuff ( ), MainLoader . () spring :

context.xml:

<bean id="childLoader" class="com.mark.test.ChildLoader" />
<bean id="theExpensiveserviceReference" class="com.mark.test.ReallyExpensiveService" />

message1/2.xml

    <bean id="classThatDoesStuff" class="com.mark.test.ClassThatDoesStuff"
  autoWired="byType">   
        <property name="messageStart" value = "Hello! " />  
    </bean>

, , ClassThatDoeStuff Child, . , , ClassThatDoesStuff . Spring..?

+3
2

, , ReallyExpensiveService . ( , , ClassThatDoesStuff .) , , ReallyExpensiveService beans , , XML, , - factory, ClassThatDoesStuff beans.

ReallyExpensiveService, , . , , "". , , , ?

, , , , , .

+1

spring . , spring . , mainloader, spring.

, , , ChildLoader ClassThatDoesStuff beans, spring .

0

All Articles