티스토리 뷰
반응형
빈의 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?"같다":"다르다");
}
}
참고 블로그
반응형
'FrameWork > Spring' 카테고리의 다른 글
CORS 과정과 처리 (0) | 2021.06.08 |
---|---|
quartz +Spring Batch 관련 참고 블로그 모음집 (0) | 2021.06.01 |
POJO(Plain Old Java Object) (0) | 2021.05.25 |
스프링(Spring) 빈(Bean) 생명주기 및 콜백 함수 (0) | 2021.05.24 |
스프링(Spring) 컨테이너의 생명 주기 (0) | 2021.05.24 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 백준
- 선언적트랜잭션 #noRollbackFor #@Transactional
- 백준14501
- 프론트엔드
- 캐시삭제
- 런타임에러
- 프론트엔드개발자
- 퇴사
- 개발중캐시삭제
- C++
- html꿀팁
- boj
- 백준퇴사
- c#
- html
- script버전
- C# 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 |
글 보관함