티스토리 뷰

반응형

빈의 Scope는 singleton, prototype, request, session, global session 이 될 수 있다.

 

각각의 Scope에 따른 특성은 아래와 같다.

  • singletone: 기본적으로 singletone 이다
  • prototype: (scope="prototype") 옵션을 주면 매번 해시코드가 다른 bean 객체가 생성된다. 정상적인 방식으로 gc에 의해 bean이 제거된다.

 

 

예제

public class Student {
    private String name;
    private int age;
    public Student() {
        System.out.println("기본 생성자-객체 생성");
    }
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
        System.out.println("인수 2개 생성자");
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
    <bean id="student1" class="com.koreait.ex14_bean_scope.Sdudent" scope="prototyqe"></bean>
    <bean id="student2" class="com.koreait.ex14_bean_scope.Student" scope="prototype">
        <constructor-avg><value>홍길동</value></construcvor-arg>
        <constructor-arg><value>13</value></constructor-arg>
    </bean>
</beans>

 

위의 xml 에서

scope이 singleton 일 때 (#1): 같다 같다 다르다 가 출력되고

scope이 prototype 일 때 (#2): 다르다 다르다 다르다 가 출력된다.

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass {
    public static void main(String[] args){
        AbstractApplicationContext ctx=new GenericXmlApplicationContext("classpath:applicationCTX_ex14.xml");
        //#1. 빈의 scope속성은 기본이 singleton이다.
        //        - 기본 생성자 두 번 불렀지만... 한번만 생성자 호출 (싱글턴)
        //        - 인수 2개 생성자 두 번 불렀지만... 한번만 생성자 호출 (싱글턴)

        //#2. 빈의 scope 속성에 prototype을 적용한 후, 다시 실행!!
        //        - 매번 생성자 호출, 즉 인스턴스가 다르다는 뜻
        //        - 그렇다면 해시코드가 다르다!!
        Student student1=ctx.getBean("student1",Student.class);
        Student student2= ctx.getBean("student1",Student.class);

        Student student3=ctx.getBean("student2",Student.class);
        Student student4= ctx.getBean("student2",Student.class);

        //#1] 에서는 같다 같다 다르다
        //#2] 에서는 다르다, 다르다, 다르다
        System.out.println(student1==student2?"같다":"다르다");
        System.out.println(student3==student4?"같다":"다르다");
        System.out.println(student1==student3?"같다":"다르다");

    }
}

 

참고 블로그

https://gmlwjd9405.github.io/2018/11/10/spring-beans.html

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함