์ค์ฝํ
- ์ฑ๊ธํค ( ๊ธฐ๋ณธ๊ฐ ) : ์ค์ง ํ๋์ ์ธ์คํด์ค
- ํ๋กํ ํ์
( @Scope("prototype") ์ถ๊ฐํด์ค์ผํจ. ) : ๋งค๋ฒ ๋ค๋ฅธ ์ธ์คํด์ค ๊ฐ์ฒด
- Request
- Session
- WebSocket
- ...
์ฑ๊ธํค
proto ๋ AppRunner๊ฐ ์ฃผ์ ๋ฐ์ ์ธ์คํด์ค์ด๊ณ , single.getProto() ๋ Singleํด๋์ค์์ ์ง์ ์ฃผ์ ์์ผ์ค ์ธ์คํด์ค์ด๋ค.
๊ฒฐ๊ณผ
๊ฒฐ๊ณผ๋ ๋น์ฐํ ์ฑ๊ธํค์ด๋ฏ๋ก ํ๋์ ๊ฐ์ฒด๊ฐ(๋๊ฐ์ ๊ฐ์ฒด๊ฐ) ์ฐํ๋ค.
ํ๋กํ ํ์
@Scope("prototype")์ ์ง์ ํด์ฃผ๊ณ
Proto ๊ฐ์ฒด์ Single ๊ฐ์ฒด ๋ฅผ ๊ฐ๊ฐ 3๋ฒ ์ถ๋ ฅํด๋ณด์๋ค.
๊ฒฐ๊ณผ๋ ์ญ์ ์ฑ๊ธํค์ ๋งค๋ฒ ๊ฐ์ ๊ฐ์ฒด๊ฐ ๋์ค๋ ๋ฐ๋ฉด, ํ๋กํ ํ์ ์ ๋งค๋ฒ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๋์ค๋๊ฑธ ์์์๋ค.
ํ๋กํ ํ์ ๋น์ด ์ฑ๊ธํค ๋น์ ์ฐธ์กฐํ๋ฉด?
- ์๋ฌด ๋ฌธ์ ์์.
์ฑ๊ธํค ๋น์ด ํ๋กํ ํ์ ๋น์ ์ฐธ์กฐํ๋ฉด?
- ํ๋กํ ํ์ ๋น์ด ์ ๋ฐ์ดํธ๊ฐ ์๋๋ค
์ฑ๊ธํค์์๋ ์ ๋ฐ์ดํธ๊ฐ ์๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- ์
๋ฐ์ดํธ ํ๊ฒ ํ๋ ค๋ฉด
- scope-proxy
- Object-Provider
- Provider(ํ์ค)
์ ๋ฐ์ดํธ ๋๊ฒ ํ๋ ๋ฐฉ๋ฒ 1 ) proxyMode = ScopeProxyMode.TARGET_CLASS (๊ธฐ๋ณธ๊ฐ : DEFAULT)
์ด๋ค ์๋ฆฌ ์ผ๊น?
ํ๋ก์๋ฅผ ๊ฑฐ์ณ์ ํ๋กํ ํด๋์ค๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ค. ์? ๋งค๋ฒ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ฐ๊ฟ์ค ์ฌ์ง๊ฐ ์๊ธฐ ๋๋ฌธ์.. ๊ทธ๋ ๊ฒ ํ๊ธฐ ์ํด์ ํ๋ก์๋ก ํ๋กํ ๋ฅผ ๊ฐ์ธ์ฃผ๋ฉด ๋๋ค.
@Component
public class Single{
@AutoWired
Proto proto; //์ฌ๊ธฐ์ proto๊ฐ ์๋ proxy ๋น์ด ์ฃผ์
์ด ๋๋ค.
public Proto getProto(){
return proto;
}
}
์ค์ง์ ์ผ๋ก ํ๋ก์๊ฐ ๋น์ผ๋ก ๋ฑ๋ก์ด ๋๊ณ , proto์๋ ํ๋ก์ ๋น์ด ์ฃผ์ ์ด ๋๋ค.
์ฑ๊ธํค ๊ฐ์ฒด ์ฌ์ฉ์ ์ฃผ์ํ ์
- ํ๋กํผํฐ๊ฐ ๊ณต์ .
@Component
public class Single{
int value = 0; //์ด ๊ฐ์ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ค.
}
๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋, value๊ฐ์ด ์๋ก ๊ณต์ ๊ฐ ๋๋ค. ์ฝ๋ฉํ ๋ ThreadSafetyํ ๋ฐฉ๋ฒ์ผ๋ก ํด์ผํ๋ค.
- ApplicationContext ์ด๊ธฐ ๊ตฌ๋์ ์ธ์คํด์ค ์์ฑ.
- ๋ชจ๋ ์ฑ๊ธํค ์ค์ฝํ์ ๋น๋ค์ ApplicationContext๊ฐ ๋น์ ๋ง๋ค๋ ์ธ์คํด์ค๊ฐ ์์ฑ์ด ๋๋ค. (๊ทธ๋์ ์ฒ์ ๊ตฌ๋์ ์๊ฐ์ด ๊ฑธ๋ฆด์ ์๋ค.)