Search code examples
xmlspringspring-bootjavabeans

How to set a private field with a public function after the constructor is called while creating a spring boot xml bean?


I have a nonstatic outer class A and I have a nested static class B in this class A. I cannot change the code of this design because it belongs to another team. What I want to do is create an object from class A but I want to set

int toBeSet 

from nested static class B with some value. For example, I'd like to set it to 5. How can I do this in spring boot application with bean? My class scheme is the following:

public class OuterClass {
    private int toBeSetOuter;

    public OuterClass(InnerClass innerClass) {
        this.toBeSetOuter = innerClass.toBeSet;
    }

    public static class InnerClass {
        private int a;
        private int b;
        private int toBeSet;

        public InnerClass(int a, int b) {
            this.a = a;
            this.b = b;
        }

        public InnerClass nonStaticMethodInStaticClass(int toBeSet) {
            this.toBeSet = toBeSet;
            return this;
        }
    }
}

What I want is like the following but with bean (in xml file) in spring boot application.

OuterClass.InnerClass innerClass = new OuterClass.InnerClass(1,2);
innerClass.nonStaticMethodInStaticClass(5);
OuterClass outerClass = new OuterClass(innerClass);

Solution

  •   <bean id="idParent" class="OuterClass">
        <constructor-arg name="innerClass" ref="id2"></constructor-arg>
      </bean>
        
      <bean id="id1" class="OuterClass$InnerClass">
        <constructor-arg name="a" value="1"></constructor-arg>
        <constructor-arg name="b" value="2"></constructor-arg>
      </bean>
    
      <bean id="id2" factory-bean="id1" factory-method="nonStaticMethodInStaticClass">
         <constructor-arg name="toBeSet" value="5"></constructor-arg>
      </bean>