๐Ÿ’ Spring/Spring ํ•ต์‹ฌ ๊ธฐ์ˆ 

3. IoC ์ปจํ…Œ์ด๋„ˆ 3๋ถ€ : @Autowired

2020. 6. 15. 21:43
๋ชฉ์ฐจ
  1. ๋™์ž‘ ์›๋ฆฌ
๋ฐ˜์‘ํ˜•

@Autowired

  • required : ๊ธฐ๋ณธ๊ฐ’์€ true (๋”ฐ๋ผ์„œ ๋ชป ์ฐพ์œผ๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™ ์‹คํŒจ)

 

 

 @Autowired๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด ์—†๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ๋นˆ์œผ๋กœ ๋“ฑ๋ก์ด ๋œ๊ฑธ๊นŒ?

์–ด๋–ค ๋นˆ์ด ๋˜๋Š” ํด๋ž˜์Šค์˜ 
์ƒ์„ฑ์ž๊ฐ€ ์˜ค์ง ํ•˜๋‚˜๋งŒ ์žˆ๊ณ  ๊ทธ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์ด ๋นˆ์œผ๋กœ ๋“ฑ๋ก์ด ๋˜์–ด์žˆ๋‹ค๋ฉด 
@Autowired๊ฐ€ ์—†๋”๋ผ๋„ ์ž๋™์œผ๋กœ ์ฃผ์ž…์„ ์‹œ์ผœ์ค€๋‹ค.

 

 

 

Repository๋ผ๋Š” interface ๋ฅผ ๊ตฌํ˜„ํ•œ interface๋Š” Spring Data JPA์—์„œ .. LifeCycle .. ์–ด์ฉŒ๊ณ  ์—์„œ bean์œผ๋กœ ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค.... ๊ทธ๋ž˜์„œ ๋”ฐ๋กœ @Autowired๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด ์—†์–ด๋„ bean์œผ๋กœ ๋“ฑ๋ก์ด ๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋˜๋ฉด @Autowired ๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด ์ ์  ์‚ฌ๋ผ์ง„๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด.

 

 

์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜

  @Autowired / @Inject๋ฅผ ์–ด๋””์— ๋ถ™์ผ๊นŒ?

 

  •    ์ƒ์„ฑ์ž ( ์–ด๋– ํ•œ ํด๋ž˜์Šค์— ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ์˜์กด์„ฑ์ด๋‹ค ํ•˜๋ฉด ์ƒ์„ฑ์ž)

๋นˆ์ด ์—†์œผ๋ฉด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ์„ ํ•˜์ง€ ๋ชปํ•œ๋‹ค. -> 

  •    Setter (๋งŒ์•ฝ *์–ด๋А ์˜์กด์„ฑ์— ๋Œ€ํ•œ Setter๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด Setter)

    *์–ด๋А ์˜์กด์„ฑ -> private final PetRepository pets; 

 

  •    ํ•„๋“œ (Setter๊ฐ€ ์—†๋‹ค๋ฉด .. ํ•˜์ง€๋งŒ @Autowired๋ฅผ ์œ„ํ•ด์„œ ๊ตณ์ด Setter๋ฅผ ๋งŒ๋“ค์–ด์„œ๊นŒ์ง€ ํ•  ํ•„์š”๋Š” ์—†๋‹ค.)

 

 

 

 

 

๋‚ด๊ฐ€ ์–ด๋–ค ๋นˆ์„ ์ฃผ์ž…๋ฐ›์•˜๋Š”์ง€ ํ™•์ธ ํ•˜๊ณ  ์‹ถ์„๋•Œ

 

 

 

1.  Runner๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ์ค€๋‹ค. (implements ApplicationRunner)

 

2. ๋นˆ์„ ์ฃผ์ž… ๋ฐ›์œผ๋ฉด, ์ฃผ์ž… ๋ฐ›์€ ๋นˆ์˜ ํด๋ž˜์Šค์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๊ฒŒ๋” ํ•ด์ค€๋‹ค.

 

3. @Primary - ๊ฐ™์€ ํƒ€์ž…์˜ ๋นˆ์ด ์—ฌ๋Ÿฌ๊ฐœ ์ผ๋•Œ

 

๊ฐ™์€ ํƒ€์ž…์˜ ๋นˆ์ด ์—ฌ๋Ÿฌ๊ฐœ์—ฌ๋„ @Primary๋กœ ๋“ฑ๋กํ•ด์ฃผ๋ฉด ๊ทธ ๋นˆ์ด ์ฃผ์ž…์ด ๋œ๋‹ค.

 

์•„๋ž˜๋Š” ์‹คํ–‰ํ–ˆ์„๋•Œ์˜ ์ถœ๋ ฅ๋ฌธ ์ด๋‹ค.

 

 

 

 

๊ฐ™์€ ํƒ€์ž…์˜ ๋นˆ์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ๋•Œ, ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œ๋ฅผ ์•ˆํ•ด์ฃผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.

   

    ๊ทธ๋ฆฌํ•˜์—ฌ ์ด ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • @Primary ("์ด ๋นˆ์„ ๋ฐ›์„๊ฑฐ๋‹ค" ๋ผ๊ณ  ๋งˆํ‚นํ•˜๋Š” ์šฉ๋„)
  • ํ•ด๋‹น ํƒ€์ž…์˜ ๋นˆ ๋ชจ๋‘ ์ฃผ์ž… ๋ฐ›๊ธฐ
  • @Qualify (๋นˆ ์ด๋ฆ„์œผ๋กœ ์ฃผ์ž…)

 

@Primary

์ด ๋นˆ์„ ์ฃผ์ž… ํ•˜๋„๋ก ํ‘œ์‹œํ•˜๋Š” ์šฉ๋„.

 

 

 

@Qualifier (๋นˆ ์ด๋ฆ„์œผ๋กœ ์ฃผ์ž…)  *์ด ๋ฐฉ๋ฒ•๋ณด๋‹จ @Primary๊ฐ€ ๋” ์•ˆ์ „ํ•˜๋‹ค.

ํ•„๋“œ์—๋‹ค๊ฐ€ ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์ค€๋‹ค.

     @Autowired @Qualifier("๋นˆ์˜ ์ด๋ฆ„")

 

 

 

ํ•ด๋‹น ํƒ€์ž…์˜ ๋นˆ ๋ชจ๋‘ ์ฃผ์ž… ๋ฐ›๊ธฐ

 

๋ชจ๋“  ํƒ€์ž…์˜ ๋นˆ์„ ์ฃผ์ž… ๋ฐ›์œผ๋ ค๋ฉด ์œ„์— ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ํ•ด๋‹น ํƒ€์ž…์˜ ๋ชจ๋“  ๋นˆ์ด ์ถœ๋ ฅ์ด ๋œ๋‹ค.

 

 

 

 

 

 

๋™์ž‘ ์›๋ฆฌ

  • BeanPostProcessor
    • ์ƒˆ๋กœ ๋งŒ๋“  ๋นˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ดํ”„ ์‚ฌ์ดํด ์ธํ„ฐํŽ˜์ด์Šค
  • AutowiredAnnotationBeanPostProcessor extends BeanPostProcessor
    • ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” @Autowired @Value ์• ๋…ธํ…Œ์ด์…˜ ๊ทธ๋ฆฌ๊ณ  JSR-330์˜ @Inject์• ๋…ธํ…Œ์ด์…˜์„ ์ง€์›ํ•˜๋Š” ์• ๋…ธํ…Œ์ด์…˜ ์ฒ˜๋ฆฌ๊ธฐ

์ถœ์ฒ˜ : http://blog.naver.com/PostView.nhn?blogId=edy5016&logNo=221280377077

 

 

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด, @Autowired ์• ๋…ธํ…Œ์ด์…˜์€ BeanPostProcessor๋ผ๋Š” ๋ผ์ดํ”„ ์‚ฌ์ดํด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด์ธ AutowiredAnnotationBeanPostProcessor์— ์˜ํ•ด ์˜์กด์„ฑ ์ฃผ์ž…์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

 

BeanPostProcessor๋Š” ๋นˆ์˜ initializing(์ดˆ๊ธฐํ™”) ๋ผ์ดํ”„ ์‚ฌ์ดํด ์ด์ „, ์ดํ›„์— ํ•„์š”ํ•œ ๋ถ€๊ฐ€ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ดํ”„ ์‚ฌ์ดํด ์ฝœ๋ฐฑ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  BeanPostProcessor์˜ ๊ตฌํ˜„์ฒด์ธ AutowiredAnnotationBeanPostProcessor๊ฐ€ ๋นˆ์˜ ์ดˆ๊ธฐํ™” ๋ผ์ดํ”„ ์‚ฌ์ดํด ์ด์ „, ์ฆ‰ ๋นˆ์ด ์ƒ์„ฑ๋˜๊ธฐ ์ „์— @Autowired๊ฐ€ ๋ถ™์–ด์žˆ์œผ๋ฉด ํ•ด๋‹นํ•˜๋Š” ๋นˆ์„ ์ฐพ์•„์„œ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋นˆ ๋ผ์ดํ”„ ์‚ฌ์ดํด

์œ„์˜ ๋นˆ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๋ณด๋ฉด 12. ๋นˆ ์ดˆ๊ธฐํ™” ์ด์ „, ์ดํ›„๋ฅผ BeanPostProcessors๊ฐ€ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

AutowiredAnnotationBeanPostProcessor๋Š” ํ•˜๋‚˜์˜ ๋นˆ์œผ๋กœ์จ spring IoC ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค.

BeanFactory(ApplicationContext)๋Š” BeanPostProcessor ํƒ€์ž…์˜ ๋นˆ = AutowiredAnnotationBeanPostProcessor ๋นˆ์„ ๊บผ๋‚ด ์ผ๋ฐ˜์ ์ธ ๋นˆ๋“ค = @Autowired๋กœ ์˜์กด์„ฑ ์ฃผ์ž…์ด ํ•„์š”ํ•œ ๋นˆ๋“ค์—๊ฒŒ @Autowired๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์„ ์ ์šฉํ•œ๋‹ค.

 

12๋‹จ๊ณ„์—๋Š” ์‚ฌ์‹ค์ƒ ์ด๋ฏธ ๋นˆ๋“ค์ด ์ฃผ์ž…์ด ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ ํ•  ์ˆ˜๊ฐ€ ์žˆ๊ฒŒ๋œ๋‹ค.

@Service
public class EventLService {

	@Autowired
    MyBookRepository   myBookRepository;

    @PostConstruct
    public void setup(){
        System.out.println(myBookRepository.getClass());
    }
}

์ถœ๋ ฅ์ด ๋˜๋Š” ์œ„์น˜๊ฐ€ Runner์™€๋Š” ๋‹ค๋ฅด๋‹ค. Spring-boot๊ฐ€ ์ง€์›ํ•˜๋Š” ApplicationRunner๋Š” applicaion์ด ์™„์ „ํžˆ ๊ตฌ๋™์ด ๋์„๋•Œ, ๊ทธ ๋‹ค์Œ์— ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋Š” ๊ฑด๋ฐ, ์ด @PostConstruct ๋ผ์ดํ”„ ์‚ฌ์ดํด ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” application ๊ตฌ๋™์ค‘(12 ๋‹จ๊ณ„)์— ์ฐํžˆ๊ฒŒ ๋œ๋‹ค.

 

BeanFactory๊ฐ€ ์ž์‹  ์•ˆ์— ๋“ฑ๋ก๋˜์–ด์žˆ๋Š” BeanPostProcessors๋ฅผ ์ฐพ๊ฒŒ ๋˜๊ณ , ๊ทธ ๊ตฌํ˜„์ฒด ์ค‘ AutowiredAnnotaionBeanPostProcessor๋ฅผ ๊ฐ ๋นˆ๋“ค์—๊ฒŒ ์ ์šฉ์„ ์‹œํ‚ค๊ฒŒ ๋œ๋‹ค. (์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๋˜์ง€๋งŒ..)

 

 

- AutowiredAnnotationBeanPostProcessor ๊ฐ€ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์žˆ๋Š”์ง€ ์ง์ ‘ ๊บผ๋‚ด์„œ ์ถœ๋ ฅํ•ด๋ณด์ž.

@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    ApplicationContext applicationContext;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        AutowiredAnnotationBeanPostProcessor bean = applicationContext.getBean(AutowiredAnnotationBeanPostProcessor.class);
        System.out.println(bean);

    }
}
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@43c87306

 

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
  1. ๋™์ž‘ ์›๋ฆฌ
'๐Ÿ’ Spring/Spring ํ•ต์‹ฌ ๊ธฐ์ˆ ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • 2. IoC ์ปจํ…Œ์ด๋„ˆ 2๋ถ€ : ApplicationContext์™€ ๋‹ค์–‘ํ•œ ๋นˆ ์„ค์ • ๋ฐฉ๋ฒ•
  • 1. IoC ์ปจํ…Œ์ด๋„ˆ 1๋ถ€ : ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ์™€ ๋นˆ
  • 4. IoC ์ปจํ…Œ์ด๋„ˆ 4๋ถ€ : @Component์™€ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”
  • ๋นˆ์„ ๋“ฑ๋กํ•˜๊ณ  ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•
iseunghan
iseunghan
๊พธ์ค€ํ•˜๊ฒŒ ์—ด์‹ฌํžˆ..
iseunghan
iseunghan

๊ณต์ง€์‚ฌํ•ญ

  • ์–ด์ œ๋ณด๋‹ค ๋‚˜์€ ์˜ค๋Š˜์ด ๋˜๊ธฐ ์œ„ํ•ด ๐Ÿ”ฅ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (260)
    • ๐Ÿ’ Spring (14)
      • ๊ฐœ๋… ๋ฐ ์ดํ•ด (2)
      • Spring ํ•ต์‹ฌ ๊ธฐ์ˆ  (24)
      • Spring REST API (8)
      • Spring MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  (7)
      • Spring Security (23)
      • Spring in Action (1)
    • ๐ŸŒป JAVA (84)
      • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ (20)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ (13)
      • ๋””์ž์ธ ํŒจํ„ด (7)
      • ์ •๋ฆฌ์ •๋ฆฌ์ •๋ฆฌ (43)
      • JUnit (1)
    • ๐Ÿ”– Snippets (3)
      • Javascript (3)
    • โš™๏ธ Devops (22)
      • โ› Git (11)
      • ๐Ÿณ Docker (6)
      • ๐Ÿง Linux (3)
      • ๐ŸŒˆ Jenkins (1)
      • ๐Ÿ“ฌ Kafka (1)
    • ๐Ÿ’ฌ ETC.. (4)
      • ๐Ÿ’ป macOS (2)
    • ๐ŸŒง๏ธ ORM (2)
      • JPA (2)
    • ๐Ÿ Python (1)
    • ๐Ÿ“š Databases (15)
      • ์˜ค๋ผํด๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ก ๊ณผ ์‹ค์Šต(2ํŒ) (3)
      • RealMySQL 8.0 (8)
    • ๐Ÿ”ฅ Computer Science (5)
      • ๐Ÿ“ก ๋„คํŠธ์›Œํฌ (5)
    • ๐Ÿท๏ธ ํ˜‘์—… (1)
    • ๐Ÿ“œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (38)
      • BAEKJOON\์ˆ˜ํ•™ 1, ์ˆ˜ํ•™ 2 (8)
      • BAEKJOON\์žฌ๊ท€ (5)
      • BAEKJOON\๋ธŒ๋ฃจํŠธ ํฌ์Šค (3)
      • BAEKJOON\์ •๋ ฌ (1)
      • BAEKJOON\๋ฐฑํŠธ๋ž˜ํ‚น (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\์ด๋ถ„ํƒ์ƒ‰ (1)
      • BAEKJOON\๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (9)
      • BAEKJOON\๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (0)
    • โœจ ISEUNGHAN (1)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
iseunghan
3. IoC ์ปจํ…Œ์ด๋„ˆ 3๋ถ€ : @Autowired
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.