시뻘건 개발 도전기

#4 : Bean Scope 본문

Framework/spring

#4 : Bean Scope

시뻘건볼때기 2020. 5. 1. 22:31
반응형

  생명주기가 그렇다고 한다면 과련 bean의 scope는 어떻게 될까. 개발자가 어떤 공부를 할 때에 scope는 빠짐없이 등장하는 것 같다. scope는 직역하면 "범위"로써 어디까지 영향을 미치는지에 대해 정의를 할 수 있다.

 

public static void main(String[] args) {
	String config = "classpath:appContext.xml";
	GenericXmlApplicationContext appContext = new GenericXmlApplicationContext(config);
	LoggerUtil logger1 = appContext.getBean("loggerUtil", LoggerUtil.class);
	
	logger1.log();
	
	LoggerUtil logger2 = appContext.getBean("loggerUtil", LoggerUtil.class);
	logger2.setPREFIX("[BEAN]");
	logger2.setPOSTFIX("[SCOPE]");
	
	logger1.log();

	appContext.close();
}

 

  logger1과 logger2 따로 만들어서 logger2는 setter를 이용해 PREFIX와 POSTFIX를 변경했다. 그 이후에 logger1을 이용해 log()를 호출하였을 뿐 특이사항은없다.

 

 

이게 무슨 일인가? 난 분명 logger2를 변경했으나 logger1이 변경되었다. 그 이유는 다음과 같다.

 

 

  xml에 만들어 놓은 loggerUtil bean은 컴퓨터 메모리 어딘가에 있을 것이다. logger1과 logger2는 그 메모리를 바라보고 있는 것이다. (C언어에서의 포인터가 떠오른다.) 다시말해서 logger1 혹은 logger2 같은 메모리 상의 loggerUtil을 보고 있으므로 수정이 된다고 하면 함께 수정이 되는 것이다.

 

xml에서 scope를 주는 방법은 다음과 같다.

<bean id="loggerUtil" class="ga.dotori.util.LoggerUtil" scope="singleton">

</bean>

 

scope의 default가 singleton임을 참고하여 다른 scope를 알아보자.

출처 : spring docs (https://docs.spring.io/spring/docs/4.2.5.RELEASE/spring-framework-reference/html/beans.html#beans-factory-scopes)

 

반응형

'Framework > spring' 카테고리의 다른 글

#6 : AOP (Aspect Oriented Programming)  (0) 2020.05.03
#5 : bean setting  (0) 2020.05.02
#3 : Container Life Cycle  (0) 2020.05.01
#2 : DI 활용  (0) 2020.05.01
#1 : spring의 핵심 DI(Dependency Injection)  (0) 2020.04.30
Comments