빈의 객체 범위

JAVA/Java_DataBase 2013.10.23 23:27

지난번에 bean 사용법과 더불어 여러기능에 대해서 

한번 써본적이 있는거 같다. 


request에도 여러 설정이 있고 bean에도 여러설정이 있는데

scope라고 해서 빈의 속성을 결정해주는게 있다.

<bean id="jdbcDao" class="springtest.jdbcDao" scope="??"></bean>



범위 

 설명

 singleton

 스프링 컨테이너에 의해 한개의 빈 객체만 생성

 prototype

 빈을 사용할 때마다 객체를 생성 

 request

 HTTP 요청마다 빈 객체를 생성(WebApplicationContext에서만 적용) 

 session

 HTTP 세션마다 빈 객체를 생성(WebApplicationContext에서만 적용) 

 global-session

글로벌 HTTP 세션에 대해 빈 객체를 생성. 포틀릿을 지원하는 컨텍스트에 대해서만 적용가능 



*나도 퍼온거라 .. 마지막 부분꺼만 대체 무슨 말인지를 모르겠다;;


singleton 이란거는 디자인 패턴이나 이런곳에서 뒤져보면 많은 설명이 있지만 설명하자면


TYPE A                        TYPE B

String A = "B";               String A = "B";

String B = "B";               String B = new String("B");


타입A와 타입B의 차이라고 할 수 있는데


TYPE A                                     TYPE B

A -------------"B"                    A -------------- "B"

B -----------┘                        B ---------------"B"


여기서 싱글톤은 타입A와 같다고 생각하면 되겠다.

한번 생성이 되고 나면 계속해서 처음 객체를 생성한 것만을 리턴해준다.


prototype같은 경우는 타입B와 동일하다고 보면되고

request는 사용자가 어떤 행위를 하여서 서버에 요청이 들어갔을 경우에 생성이 된다.

session은 홈페이지에 접속한 사용자마다 세션이라는 것이 생성이되는데 그 세션마다 어떠한 빈을 생성하게 한다했을 경우에 설정하는 거 같고..


전체적으로 좀 부족한 설명이긴 한데 나도 배우는 입장이라 이해해주기를 바란다~

싱글톤 패턴의 경우에는 주의사항이 있다. 객체를 한번만 생성하기 때문에 매우 편리하지 않을까 하는 생각도 있는데 쉽게 풀어 설명하면 전역변수라고 생각하면 되겠다. 여기저기서 참조해서 사용할 수 있는

리딩이라던지 DBConnection을 리턴해준다던지의 용도로 사용하면 적절하지만 긴 시간동안 처리되는 작업 또는 공유적으로 처리되는 변수값들 또는 작업들을 싱글톤으로 지정했을 경우에는 


-상호 배제(mutual exclusion, Mutex, 뮤텍스)는 동시 프로그래밍에서 공유 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘으로, 임계 구역(critical section)으로 불리는 코드 영역에 의해 구현된다.

공유 불가능한 자원의 예로는 동시에 실행되고 있는 프로그램간의 통신에 사용되는 비트 단위의 깃발, 계수기,  등이다. 문제는 스레드가 언제라도 정지되거나 시작될 수 있다는 것이다.

예) 프로그램의 일부분이 여러 단계를 거치면서 데이터를 읽고 쓰고 있다고 하자. 그런데 예상치 못한 사건 등에 의해 다른 스레드가 동작하기 시작했다. 첫 번째의 스레드가 쓰고 있는 영역에서, 이 두 번째의 스레드가 또 다른 작업을 시작한다면, 해당 영역의 값은 부적절하며 예상할 수 없는 상태에 놓이게 된다. 게다가 두 번째의 스레드가 값을 덮어 써버리기라도 한다면, 복구 불가능한 상태로 되고 만다. 그러므로 공유 데이터를 접근하는 프로그램 내부의 이른바 임계 구역이라는 부분은 홀로 수행되도록 보호되어야 하며, 다른 스레드가 동일한 부분의 프로그램을 수행해서 동일한 공유 데이터를 접근하는 것을 막아야 한다.

단일 프로세서 시스템에서, 상호 배제를 구현하는 가장 단순한 방법은 인터럽트를 억제해서 공유 데이터가 손상되는 것을 막는 것이다. 성능에 최소한의 영향을 주기 위해 인터럽트가 발생하지 않을 명령어 집합의 수는 가능한 최소로 유지시키는 것이 좋다.

상호배제를 처음으로 소프트웨어를 통해 해결한 사람은 네덜란드 수학자 데커(Dekker)이며 그 알고리즘을 데커의 알고리즘이라 한다.

상호배제는 교착상태의 4가지 필요조건 중 하나이다.

(출처 : 위키펌)


위와같이 상호배제의 문제가 발생할 것으로 추측된다. (직접 겪어본건 아니라서;;;)


저작자 표시 비영리 변경 금지
신고

'JAVA > Java_DataBase' 카테고리의 다른 글

AOP?  (0) 2013.11.07
빈의 라이프 사이클  (0) 2013.11.05
빈의 객체 범위  (0) 2013.10.23
객체간의 의존관계 설정.  (0) 2013.10.21
Spring API  (0) 2013.10.21
빈생성 및 사용  (0) 2013.10.21


티스토리 툴바