Spring Bean, Spring Container
์คํ๋ง ๋น(Spring Bean) ์ด๋?
๋น ( Bean )
Spring Ioc ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ์๋ฐ ๊ฐ์ฒด.
์ฆ, ์คํ๋ง ์ปจํ ์ด๋์ ์ํด์ ์๋ฐ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด ์ง๊ฒ ๋๋ฉด ์ด ๊ฐ์ฒด๋ฅผ ์คํ๋ง์ ์คํ๋ง ๋น์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ ๋๋ค.
๊ธฐ์กด์ Java ํ๋ก๊ทธ๋๋ฐ์์๋ ํด๋์ค๋ฅผ ์์ฑํ๊ณ new๋ก ์ํ๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ฌ ์ฌ์ฉํ์ต๋๋ค. ํ์ง๋ง Spring์์๋ new๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ ๊ฐ์ฒด๊ฐ ์๋, Spring์ ์ํด ๊ด๋ฆฌ๋์ด์ง๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฆ, Spring์ ์ํด ์์ฑ๋๊ณ ๊ด๋ฆฌ๋๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ Bean์ด๋ผ ํฉ๋๋ค.
Spring Bean, Ioc Container์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ
1. Annotation ์ด์ฉ
• @Component ์ ๋ ธํ ์ด์ ์ด ์๋ค๋ฉด ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋ก ๋ฉ๋๋ค.
• @Controller, @Service, @Repository ์ ๋ ธํ ์ด์ ๋ ์คํ๋ง ๋น์ผ๋ก ์๋๋ฑ๋ก๋ฉ๋๋ค.
2. Bean Configuration File์ ์ง์ Bean ๋ฑ๋ก
• @Configuration๊ณผ @Bean Annotation ์ ์ด์ฉํ์ฌ Bean์ ๋ฑ๋กํ ์ ์์ต๋๋ค.
• @Configuration์ ์ด์ฉํ๋ฉด Spring Project ์์์ Configuration ์ญํ ์ ํ๋ Class๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
• ๋ฑ๋กํ๊ณ ์ ํ๋ Class์ @Bean Annotation์ ์ฌ์ฉํด์ฃผ๋ฉด ๊ฐ๋จํ๊ฒ Bean์ ๋ฑ๋กํ ์ ์์ต๋๋ค.
@Configuration
public class HelloConfiguration {
@Bean
public HelloController sampleController() {
return new SampleController;
}
}
์คํ๋ง ์ปจํ ์ด๋๋?
• ์๋ฐ ๊ฐ์ฒด(Bean)์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์์ฑ๋ ์๋ฐ ๊ฐ์ฒด๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ญํ ์ ํฉ๋๋ค.
• Ioc(Inversion of Control)์ DI(Dependency Injection)์ ์๋ฆฌ๊ฐ ์ ์ฉ๋ฉ๋๋ค.
• ์คํ๋ง์ ์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น์ ๋ฑ๋กํ ๋, ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค์ผ๋ก ๋ฑ๋กํฉ๋๋ค.
• ๊ทธ๋ฌ๋ฏ๋ก ๊ฐ์ ์คํ๋ง ๋น์ด๋ฉด ๋ชจ๋ ๊ฐ์ ์ธ์คํด์ค์ ๋๋ค.
* ์ฑ๊ธํค : ์ ์ผํ๊ฒ ํ๋๋ง ๋ฑ๋กํด์ ๊ณต์
์ ์ด์ ์ญ์ ๊ณผ ์์กด์ฑ ์ฃผ์
๊ธฐ์กด์๋ ๊ฐ๋ฐ์๊ฐ new ์ฐ์ฐ์, ์ธํฐํ์ด์ค ํธ์ถ, ํฉํ ๋ฆฌ ํธ์ถ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์๋ฉธ์์ผฐ๋ค๋ฉด, ์คํ๋ง ์ปจํ ์ด๋๊ฐ ํด๋น ์ญํ ์ ์์๋ฐ์ ๋์ ํด์ค๋๋ค.
ex) AppConfig๋ฅผ ์ฌ์ฉํด ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์์กด์ฑ ์ฃผ์ ์ ํ๋ค๋ฉด, ์คํ๋ง์์๋ ์คํ๋ง ์ปจํ ์ด๋๋ผ๋ ๊ฒ์ ์ฌ์ฉํ์ฌ ๋น(๊ฐ์ฒด) ๊ด๋ฆฌ
์ฆ, ์ ์ดํ๋ฆ์ ์ธ๋ถ์์ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋๋ค. (์ ์ด์ ์ญ์ ) ๋ํ ๊ฐ์ฒด๋ค ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๋ฐํ์ ๊ณผ์ ์์ ์์์ ๋ง๋ค์ด ์ค๋๋ค.
์คํ๋ง ์ปจํ ์ด๋ ์ข ๋ฅ
1) BeanFactory
• ๋น์ ๋ฑ๋กํ๊ณ ์์ฑํ๊ณ ์กฐํํ๊ณ ๋๋ ค์ฃผ๋ ๋ฑ ๋น์ ๊ด๋ฆฌํ๋ ์ญํ
• getBean() ๋ฉ์๋๋ฅผ ํตํด ๋น์ ์ธ์คํด์คํ
• ์ฒ์์ผ๋ก getBean() ๋ฉ์๋๊ฐ ํธ์ถ๋ ์์ ์์์ผ ํด๋น ๋น์ ์์ฑ
• BeanFactory๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์๋ค.
2) ApplicationContext
• BeanFactory์ ์์์ ๋ฐ์ ํ์ฅํ ๊ฒ์ผ๋ก ๋น์ ๊ด๋ฆฌํ ์ ์๋ค.
• ์ธํฐํ์ด์ค์ด๋ค.
• XML์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ ์ ์์ผ๋ฉฐ, @๊ธฐ๋ฐ ์๋ฐ ์ค์ ํด๋์ค๋ก ๋ง๋ค ์ ์๋ค. @Configuration
• ํ ์คํธ ๋ฉ์์ง ๊ด๋ฆฌ, ์ด๋ฏธ์ง๊ฐ์ ํ์ผ ์์์ ๋ก๋, ๋ฆฌ๋์ค๋ก ๋ฑ๋ก๋ ๋น์๊ฒ ์ด๋ฒคํธ ๋ฐ์ ์๋ฆผ ๋ฑ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ
• ์ด๊ธฐํ ์์ ์ ๋ชจ๋ ์ฑ๊ธํค ๋น์ ๋ฏธ๋ฆฌ ๋ก๋ํ ํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ ํ์๋ ๋น์ ์ง์ฐ ์์ด ๋ฐ์
// ์ฌ์ฉ ์์
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
// ๋ฉ์๋ ์ด๋ฆ์ผ๋ก ๋ฑ๋ก๋ ๊ฐ์ฒด, ๋ฐํํ์
// SpringContainer๋ ์ค์ ์ ๋ณด(AppConfig.class)๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์
(DI)ํ๋ค.
2-1) Bean ์์ฒญ ์ ApplicationContext์์์ ์ฒ๋ฆฌ ๊ณผ์
ApplicationContext๋ @Configuration์ด ๋ถ์ ํด๋์ค๋ฅผ ์ค์ ์ ๋ณด๋ก ๋ฑ๋กํด๋ก๋๋ค. ํด๋น ์ค์ ์ ๋ณด ํด๋์ค ๋ด์์ @Bean์ด ๋ถ์ ๋ฉ์๋์ ์ด๋ฆ์ ๋น ๋ชฉ๋ก์ผ๋ก ์์ฑํ ํ ๋น ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์์ฑํ ๋น ๋ชฉ๋กํด์ ํด๋น @Bean์ ํธ์ถํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋๋ ค์ค๋๋ค.
ํ์ต์ ๋ง์ ๋์์ด ๋ ๋ธ๋ก๊ทธ ๋งํฌ๋ฅผ ์ฐธ์กฐํ์ต๋๋ค. ๐
์ฐธ์กฐ ๋ฐ ์ถ์ฒ
์คํ๋ง ๋น(Spring Bean)์ด๋? ๊ฐ๋ ์ ๋ฆฌ
[Spring] ์คํ๋ง ์ปจํ ์ด๋์ ๋น์ด๋?
[Spring] ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ(Application Context)์ ์คํ๋ง์ ์ฑ๊ธํค(Singleton)