본문 바로가기

Back-End/Java

[Spring] depends-on 사용하기

sample03.xml




	
	


depends-on을 사용하면, 특정 객체를 먼저 생성할 수 있습니다.

bean b 코드를 먼저 작성했지만 depends-on을 a로 설정하였기 때문에, 생성은 a -> b 순서가 됩니다.



GlobalObject.java

package com.example.spring.basic02; public final class GlobalObject { private static Object value = null; //Class A, Class B의 String 값을 저장 private GlobalObject() { } public synchronized static void setValue(Object o) { value = o; } public static Object getValue() { return value; } }


GlobalObject Class에는 모든 인스턴스들이 공유하는 static 멤버변수와 set/get 함수가 있습니다.



A.java

package com.example.spring.basic02;

public class A {

    public A() {
        GlobalObject.setValue("Undetermined"); //GlobalObject의 Object형식의 "Undetermined" String이 저장됨
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder();
        sb.append("A"); //Undetermined
        sb.append("{}");
        sb.append("GlobalObject.getValue()=").append(GlobalObject.getValue()).append("}");
        return sb.toString();
    }
}


GlobalObject의 Object value 변수에 "Undetermined"라는 String 값을 저장합니다.



B.java

package com.example.spring.basic02;

public class B {

    public B() {
        GlobalObject.setValue("Completed"); //GlobalObject의 Object형식의 "Completed" String이 저장됨
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder();
        sb.append("B");
        sb.append("{}");
        sb.append("GlobalObject.getValue()=").append(GlobalObject.getValue()).append("}");
        return sb.toString();
    }
}


GlobalObject의 Object value 변수에 "Completed"라는 String 값을 저장합니다.



Sample03.java

package com.example.spring.basic02;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class Sample03 {

		public static void main(String[] args) {
			XmlBeanFactory bf = 
					new XmlBeanFactory(new ClassPathResource("basic02/sample03.xml"));
			
			B b = (B) bf.getBean("b"); //xml에서 depends-on="a"이기 때문에 A객체가 먼저 생성됨(Undetermined)
			A a = (A) bf.getBean("a");
			
			System.out.println(b);
			System.out.println(a);
		}
}


B b = (B)bf.getBean("b") 코드를 통해 B객체를 불러왔지만,

b는 xml에서 depends-on을 a로 설정하였기 때문에 a가 먼저 생성됩니다.

즉, a -> b 순서로 객체가 생성됩니다.

GlobalObject의 value변수에 "Undetermined"가 저장됩니다.

GlobalObject의 value변수에 "Completed"가 저장되어 덮어씌워지게됩니다.



출력결과

B{}GlobalObject.getValue()=Completed}

A{}GlobalObject.getValue()=Completed}