Skip to content

Latest commit

ย 

History

History
124 lines (84 loc) ยท 4.09 KB

Spring_Bean_Life_Cycle.md

File metadata and controls

124 lines (84 loc) ยท 4.09 KB

Spring Bean์˜ ์ƒ๋ช…์ฃผ๊ธฐ(life-cycle)

๋นˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ

๊ธฐ๋ณธ์ ์œผ๋กœ ๋นˆ ์Šค์ฝ”ํ”„๊ฐ€ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ์„ฑ ์‹œ์ ์— ๋นˆ๋„ ์ƒ์„ฑ๋˜๊ณ  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์†Œ๋ฉธ ์‹œ์ ์— ๋นˆ๋„ ์†Œ๋ฉธ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ํ•ด๋‹น ๊ธ€์—์„œ์˜ ๋นˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ๋นˆ ์Šค์ฝ”ํ”„๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์„ค์ •ํ–ˆ์„ ๋•Œ๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

๋นˆ ์Šค์ฝ”ํ”„๋Š” ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ ์ฐธ์กฐ

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ดˆ๊ธฐํ™”์™€ ์ข…๋ฃŒ๋ผ๋Š” ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

    public static void main(String[] args) {

				// 1. ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™” (์ƒ์„ฑ)
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext(AppContext.class);

				// 2. ์ปจํ…Œ์ด๋„ˆ ๋‚ด์— ๋“ฑ๋ก๋œ ๋นˆ ์‚ฌ์šฉ
        MyClass mc = context.getBean("myClass", MyClass.class);
        mc.print();

				// 3. ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ
        context.close();
    }

}
  1. ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”

    ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ƒ์„ฑ์ž์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ์„ค์ • ํด๋ž˜์Šค(@Configuration์ด ์ ์šฉ๋œ ํด๋ž˜์Šค)์—์„œ ์ •๋ณด๋ฅผ ์ฝ์–ด์™€ ๋นˆ์„ ์ƒ์„ฑํ•˜๊ณ  ์—ฐ๊ฒฐ(์˜์กด์„ฑ ์ฃผ์ž…)ํ•œ๋‹ค.

  2. ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ

    ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๊ณ  ๋‚˜๋ฉด getBean์„ ํ†ตํ•ด ๋“ฑ๋ก๋œ ๋นˆ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ

    ์ปจํ…Œ์ด๋„ˆ์˜ ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค. ์ด ๋•Œ ๋นˆ ๊ฐ์ฒด๋„ ๋ชจ๋‘ ์†Œ๋ฉธํ•œ๋‹ค.

์Šคํ”„๋ง ๋นˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ

์Šคํ”„๋ง ๋นˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ์˜ํ•ด ๊ด€๋ฆฌ๋œ๋‹ค.

์Šคํ”„๋ง ๋นˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ๋‹ค์Œ์˜ 4๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  1. ๊ฐ์ฒด ์ƒ์„ฑ โ€” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ๊ณผ ํ•จ๊ป˜ ์ƒ์„ฑ
  2. ์˜์กด ์„ค์ • โ€” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ์„ฑ๊ณผ ํ•จ๊ป˜ ์„ค์ •
  3. ์ดˆ๊ธฐํ™” โ€” 1,2๋ฒˆ์ด ์™„๋ฃŒ๋œ ํ›„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋นˆ ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•œ ์ง€์ • ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
  4. ์†Œ๋ฉธ โ€” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ ์‹œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋นˆ ๊ฐ์ฒด์˜ ์†Œ๋ฉธ์„ ์œ„ํ•œ ์ง€์ • ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ

๋นˆ ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”์™€ ์†Œ๋ฉธ

  • ์ดˆ๊ธฐํ™”

    InitializingBean ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋’ค afterPropertiesSet ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๋ฉด ๋œ๋‹ค.

    public interface InitializingBean {
    	void afterPropertiesSet() throw Exception;
    }
  • ์†Œ๋ฉธ

    DisposableBean ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋’ค destroy ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๋ฉด ๋œ๋‹ค.

    public interface DisposableBean {
    	void destroy() throw Exception;
    }
  • ์˜ˆ์‹œ

    package com.yihyun.introduction;
    
    import org.springframework.beans.factory.DisposableBean;
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyClass implements InitializingBean, DisposableBean {
    
        private String name;
    
        public void print() {
            System.out.println("hello " + name);
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("myClass Bean ์ดˆ๊ธฐํ™”");
        }
    
        @Override
        public void destroy() throws Exception {
            System.out.println("myClass Bean ์†Œ๋ฉธ");
        }
    }

์™ธ๋ถ€ ํด๋ž˜์Šค๋ฅผ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ดˆ๊ธฐํ™”์™€ ์†Œ๋ฉธ

๋ณดํ†ต ๋นˆ ๋“ฑ๋ก์„ ์œ„ํ•ด ๋นˆ์˜ ์›ํ˜•์ด ๋˜๋Š” ํด๋ž˜์Šค์— @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ์ ์šฉํ•˜์ง€๋งŒ, ์™ธ๋ถ€์—์„œ ์ œ๊ณต๋ฐ›์•„ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์—†๋Š” ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ์—๋Š” @Configuration์—์„œ ์ง์ ‘ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

์ด ๊ฒฝ์šฐ์—๋Š” ์œ„์ฒ˜๋Ÿผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ดˆ๊ธฐํ™”์™€ ์†Œ๋ฉธ ๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

@Bean(initMethod = "๋ฉ”์†Œ๋“œ๋ช…", destroyMethod = "๋ฉ”์†Œ๋“œ๋ช…")
public ExternalClass externalClass() {
	return new ExternelClass();
}