A bean is an object that is instantiated, assembled, and managed by a Spring IoC container.
๊ณต์๋ฌธ์์์ Spring Bean์ด๋ Spring IoC container์ ์ํด ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด๋ผ๊ณ ํฉ๋๋ค.
<!-- ๊ฐ๋จํ ๋น ์ ์ -->
<bean id="..." class="..."></bean>
<!-- scope์ ํจ๊ป ๋น ์ ์ -->
<bean id="..." class="..." scope="singleton"></bean>
<!-- property์ ํจ๊ป ๋น ์ ์ -->
<bean id="..." class="...">
<property name="beaninit" value="Hello World!"/>
</bean>
<!-- ์ด๊ธฐ์ ๋ฉ์๋์ ํจ๊ป ๋น ์ ์ -->
<bean id="..." class="..." init-method="..."></bean>
// ์์ฑ ๊ด๋ จํ ์ธํฐํ์ด์ค
public interface InitializingBean {
void afterPropertiesSet() throws Exception;
}
// ์๋ฉธ ๊ด๋ จํ ์ธํฐํ์ด์ค
public interface DispoasableBean {
void destroy() throws Exception;
}
public class Test implements InitializingBean, DisposableBean {
@Override
public void afterPropertiesSet() throws Exception {
//๋น ์์ฑํ ๋ฉ์๋ ํธ์ถ
System.out.println("afterPropertiesSet() ์คํ");
}
@Override
public void destroy() throws Exception {
// ์๋ฉธ์ ์งํํ๋ ๋ฉ์๋
System.out.println("destroy() ์คํ");
}
}
singleton : ํด๋น Bean์ ๋ํด IoC ์ปจํ ์ด๋์์ ๋จ ํ๋์ ๊ฐ์ฒด๋ก๋ง ์กด์ฌํฉ๋๋ค.
prototype : ํด๋น Bean์ ๋ํด ๋ค์์ ๊ฐ์ฒด๊ฐ ์กด์ฌํ ์ ์์ต๋๋ค. prototype bean์ ๋ชจ๋ ์์ฒญ์์ ์๋ก์ด ๊ฐ์ฒด๋ก ์์ฑํ๋ ๊ฒ์ด๋ฉฐ, ์์กด์ฑ ๊ด๊ณ์ bean์ด ์ฃผ์ ๋ ๋๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด ์ฃผ์ ๋๋ค. GC์ ์ํด bean์ด ์๋์ผ๋ก ์ ๊ฑฐ๋๋ค.
request : ํด๋น Bean์ ๋ํด ํ๋์ HTTP Request์ ๋ผ์ดํ์ฌ์ดํด์์ ๋จ ํ๋์ ๊ฐ์ฒด๋ก๋ง ์กด์ฌํฉ๋๋ค.
session : ํด๋น Bean์ ๋ํด ํ๋์ HTTP Session์ ๋ผ์ดํ์ฌ์ดํด์์ ๋จ ํ๋์ ๊ฐ์ฒด๋ก๋ง ์กด์ฌํฉ๋๋ค.
global session : ํด๋น Bean์ ๋ํด ํ๋์ Global HTTP Session์ ๋ผ์ดํ์ฌ์ดํด์์ ๋จ ํ๋์ ๊ฐ์ฒด๋ก๋ง ์กด์ฌํฉ๋๋ค.
request, session, global session์ MVC ์น ์ดํ๋ฆฌ์ผ์ด์ ์์๋ง ์ฌ์ฉํฉ๋๋ค.
@Component
public class TestBean{
...
}
์ฑ๊ธํค ์ค์ฝํ์ ๊ฒฝ์ฐ ์์ ์์ ์ฝ๋์ ๊ฐ์ด @Component ๋ก ๋ฑ๋ก์ ํด๋์ผ๋ฉด ๋ํดํธ ๊ฐ ์๋์ผ๋ก ๋ฑ๋ก๋ฉ๋๋ค.
prototype ์ค์ฝํ ์๋ ๋ฑ๋ก
@Scope("prototype")
@Component
public class TestBean{
...
}
์๋ ๋ฑ๋ก์ ๊ฒฝ์ฐ @Scope๋ก ํด๋๊ณ prototype์ ๋ช ์ํด๋์ผ๋ฉด ๋ฉ๋๋ค.
prototype ์ค์ฝํ ์๋ ๋ฑ๋ก
@Scope("prototype")
@Bean
public class TestBean{
PrototypeBean TestBean(){
return new TestBean();
}
}
์๋ ๋ฑ๋ก์ ๊ฒฝ์ฐ์๋ @Bean, @Scope๋ฅผ ๋ช ์ํ ๋ค์ ์์ฑ์๋ก PrototypeBean์ ๋ฐํํ๋ฉด ๋ฉ๋๋ค.
ํผ๋๋ฐฑ ๋ฐ ๊ฐ์ ์ ์ ๋๊ธ์ ํตํด ์๋ ค์ฃผ์ธ์๐