hyeonga_code

Spring_빈 객체 범위 scope 속성 본문

Spring

Spring_빈 객체 범위 scope 속성

hyeonga 2023. 12. 15. 07:59
반응형


      - scope : 빈 객체의 범위
            - 하나의 빈 설정에 대해 한 개의 빈 객체만을 생성
            - scope 속성 값
                  - singleton
                        - 스프링 컨테이너에 한 개의 빈 객체만 존재합니다.
                        - 기본값
                  - prototype
                        - 빈을 사용할 때마다 객체를 생성합니다.
                  - request
                        - HTTP 요청마다 빈 객체를 생성합니다.
                        - WebApplicationContext에서 적용
                  - session
                        - HTTP 세션마다 빈 객체를 생성합니다.
                        - WebApplicationContext에서 적용
                  - global-session
                        - 글로벌 HTTP 세션에 대해 빈 객체를 생성합니다.
                        - 포틀릿을 지원하는 컨텍스트에 대해서만 적용이 가능합니다.

- 'applicationContext.xml'
      <bean id="tv" class="basic.spring.polymorphism.SamsungTV5" scope="singleton"/>
=====

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
    
<!-- scope     -->
    <bean id="samsungTV3" class="sts.spring.ioc.SamsungTV3" scope="singleton" />
    <bean id="lgTV3" class="sts.spring.ioc.LgTV3" scope="prototype" />
    
</beans>



'SamsungTV3.java' 클래스 생성
=====

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package sts.spring.ioc;
 
public class SamsungTV3 implements TV {
    
    public SamsungTV3() {
        System.out.println("[     Create SamsungTV3     ]");
    }
    
    @Override
    public void powerOn() {
        System.out.println("SamsungTV3 powerOn");
    }
    
    @Override
    public void powerOff() {
        System.out.println("SamsungTV3 powerOff");
    }
    
    @Override
    public void volumeUp() {
        System.out.println("SamsungTV3 volumeUp");
    }
    
    @Override
    public void volumeDown() {
        System.out.println("SamsungTV3 volumeDown");
    }
}
 



'LgTV3.java' 클래스 생성
=====

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package sts.spring.ioc;
 
public class LgTV3 implements TV{
 
    public LgTV3() {
        System.out.println("[       Create LgTV3       ]");
    }
    
    @Override
    public void powerOn() {
        System.out.println("LgTV3 powerOn");
    }
 
    @Override
    public void powerOff() {
        System.out.println("LgTV3 powerOff");        
    }
 
    @Override
    public void volumeUp() {
        System.out.println("LgTV3 volumeUp");
    }
 
    @Override
    public void volumeDown() {
        System.out.println("LgTV3 volumeDown");        
    }
 
}
 



'TVUser3.java' 클래스 생성
=====

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package sts.spring.ioc;
 
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
 
public class TVUser3 {
    public static void main(String[] args) {
        
        // Spring 컨테이너를 구동합니다.
        AbstractApplicationContext fac = new GenericXmlApplicationContext("applicationContext.xml");
        
        // Spring 컨테이너에 등록한 객체를 요청합니다.
        TV samsungTV1 = (TV) fac.getBean("samsungTV3");
        TV samsungTV2 = (TV) fac.getBean("samsungTV3");
        TV samsungTV3 = (TV) fac.getBean("samsungTV3");
        
        samsungTV1.powerOn();
        samsungTV2.powerOn();
        samsungTV3.powerOn();
        System.out.println();
        
        TV lgTV1 = (TV) fac.getBean("lgTV3");
        TV lgTV2 = (TV) fac.getBean("lgTV3");
        TV lgTV3 = (TV) fac.getBean("lgTV3");
        
        lgTV1.powerOff();
        lgTV2.powerOff();
        lgTV3.powerOff();
        
        
        // Spring 컨테이너를 종료합니다.
        fac.close();
            /*
             - singletone : 하나의 객체만 생성됩니다.
                [     Create SamsungTV3     ]
                SamsungTV3 powerOn
                SamsungTV3 powerOn
                SamsungTV3 powerOn
                
            - prototype : 여러 객체를 생성할 수 있습니다.
                [       Create LgTV3       ]
                [       Create LgTV3       ]
                [       Create LgTV3       ]
                LgTV3 powerOff
                LgTV3 powerOff
                LgTV3 powerOff
             */
    }
}
 



















반응형