1 λΆ„ μ†Œμš”

πŸ“˜μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ™€ μŠ€ν”„λ§ λΉˆμ— λŒ€ν•΄μ„œ

1. μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ

μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλž€ λ¬΄μ—‡μΌκΉŒ?
μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” μŠ€ν”„λ§μ—μ„œ μžλ°” 객체듀을 κ΄€λ¦¬ν•˜λŠ” 곡간을 λ§ν•œλ‹€.
μžλ°” 객체λ₯Ό μŠ€ν”„λ§μ—μ„  빈(Bean)이라고 ν•˜λŠ”λ°, μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ—μ„œλŠ” 이 빈의 생성뢀터 μ†Œλ©ΈκΉŒμ§€λ₯Ό 개발자 λŒ€μ‹  κ΄€λ¦¬ν•΄μ£ΌλŠ” 곳이라고 ν•  수 μžˆλ‹€.

μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” 크게 두 μ’…λ₯˜λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.
μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” 크게 두 μ’…λ₯˜λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.
ν•˜λ‚˜λŠ” BeanFactory이고, λ‹€λ₯Έ ν•˜λ‚˜λŠ” ApplicationContext이닀.
ν•˜μ§€λ§Œ, ApplicationContextκ°€ BeanFactoryλ₯Ό ν¬κ΄„ν•˜λŠ” κ°œλ…μ΄λΌ λŒ€λΆ€λΆ„ ApplicationContextλ₯Ό μ‚¬μš©ν•œλ‹€!

그럼 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ™€ λΉˆμ„ μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” 뭔데?
μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— 객체, λΉˆμ„ λ“±λ‘ν•˜λŠ” μ΄μœ λŠ” μŠ€ν”„λ§μ΄ 각 객체간 μ˜μ‘΄κ΄€κ³„λ₯Ό κ΄€λ¦¬ν•˜λ„λ‘ ν•˜κΈ° μœ„ν•¨μ΄λ‹€.
객체가 μ˜μ‘΄κ΄€κ³„λ₯Ό 등둝할 λ•ŒλŠ” μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ—μ„œ ν•΄λ‹Ήν•˜λŠ” λΉˆμ„ μ°Ύκ³ , κ·Έ 빈과 μ˜μ‘΄μ„±μ„ λ§Œλ“ λ‹€.

[μ»¨ν…Œμ΄λ„ˆμ— 빈 등둝 ν˜•νƒœ]

빈 이름 빈 객체
Β 
Β 
Β 

2. μŠ€ν”„λ§ 빈

μžλ°” 객체 == 빈이고, μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— μŠ€ν”„λ§ λΉˆμ„ λ“±λ‘ν•˜λŠ” 것은 μ•Œκ² λŠ”λ° μ–΄λ–»κ²Œ ν•˜λŠ”λ°?
μŠ€ν”„λ§μ€ λ³΄ν†΅μ˜ 경우 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— 빈 μΈμŠ€ν„΄μŠ€λ₯Ό 단 ν•œκ°œλ§Œ μ €μž₯ν•˜λŠ” 싱글톀 방식을 μ‚¬μš©ν•œλ‹€.
κ·Έλž˜μ„œ β€œλΉˆ 이름은 항상 λ‹€λ₯΄κ²Œ 지정”이 λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
κ·Έλ ‡λ‹€λ©΄ μŠ€ν”„λ§ λΉˆμ€ μ–΄λ–»κ²Œ λ“±λ‘ν• κΉŒ? 2가지 방법이 μžˆλ‹€.

2.1. μžλ™ 빈 등둝

μžλ™ 빈 등둝은 @Componentμ• λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ μŠ€μΊ”λ°©μ‹μ΄λ‹€.
@Controller, @Service, @Repository같은 μ• λ…Έν…Œμ΄μ…˜λ“€μ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 보면 @Componentλ₯Ό ν¬ν•¨ν•˜κ³  μžˆμ–΄μ„œ μ € μ• λ…Έν…Œμ΄μ…˜λ“€μ„ μ‚¬μš©ν•΄λ„ 빈이 μžλ™μœΌλ‘œ λ“±λ‘λœλ‹€.

2.2. μˆ˜λ™ 빈 등둝

@Configurationκ³Ό @Beanμ• λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•œλ‹€.
μŠ€ν”„λ§ 섀정정보 클래슀(ex) AppConfig)에 @Configurationμ• λ…Έν…Œμ΄μ…˜μ„ λΆ™μ—¬ 섀정정보 ν΄λž˜μŠ€μž„μ„ λͺ…μ‹œν•œλ‹€.
그리고 빈으둜 등둝할 객체의 μƒμ„±μžμ— @Beanμ• λ…Έν…Œμ΄μ…˜μ„ 뢙인닀.

@Configuration
public class AppConfig {
    
   @Bean
   public MemberService memberService() {
       return new MemberService(memberRepository());
   }
}

2.2.1. μŠ€ν”„λ§ 빈 κ΄€λ ¨ λ©”μ„œλ“œ

ApplicationContext νƒ€μž…μ˜ λ³€μˆ˜λ₯Ό ac라고 ν•˜μž.

getBean()
νŠΉμ • μŠ€ν”„λ§ λΉˆμ„ μ‘°νšŒν•˜λŠ”λ° μ‚¬μš©ν•¨.
νŒŒλΌλ―Έν„°λ‘œ μ—¬λŸ¬ μ’…λ₯˜κ°€ 올 수 μžˆλŠ”λ° μ•„λž˜μ™€ κ°™λ‹€.

  • ac.getBaen(classνƒ€μž…)
  • ac.getBean(빈 이름, classνƒ€μž…)
  • ac.getBean(빈 이름)


getBeanDefinitionNames()
μŠ€ν”„λ§μ— λ“±λ‘λœ λͺ¨λ“  λΉˆλ“€μ„ μ‘°νšŒν•¨.

νƒœκ·Έ:

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°