2016-09-13 1 views
0

의존성 주입에 관해서는 의심 스럽다. 내 컨트롤러, 서비스, DAO가 모두 싱글 톤이라고 가정 해 보자. 보통 우리가 컨트롤러를 생성 할 때 그 클래스의 인스턴스 변수로 서비스를 주입하지만, 우리의 컨트롤러가 무국적이라면 싱글 톤 패턴에 대해 동시성 문제는 발생하지 않을 것입니다. 그러나 여기서는 서비스 의존성을 선언하여 무 상태가되어서는 안되기 때문에 동기화를 처리해야합니다.UnderStanding of @Controller @Service @Repository

나는 초심자이므로이 의심을 분명히하기 때문에 나는이 자연의 의문을 염두에두고 자연스럽게 생각합니다. 나는 완전히 잘못 생각하고 있는지 모르겠습니다. 도와주세요.

+0

필요한 동기화가 무엇이라고 생각하십니까? – OrangeDog

+0

나는 자연에서 싱글 톤인 컨트롤러 클래스에서 사출 서비스 빈이라면 컨트롤러를 자연 상태로 만들기 만하면된다는 것을 알고 싶다. 만약 내가 그렇게한다면 어떤 일을 잘못해서도 안된다. 어디에서나 싱글 톤 빈은 동시성을 막기 위해 스테이트리스가되어야하기 때문이다. –

+0

서비스가 무국적으로되지 않아야한다고 생각하는 이유는 무엇입니까? 모든 싱글 톤 빈은 stateless (스레드 안전)이어야합니다. – mokarakaya

답변

0

서비스와 컨트롤러가 상태 비 저장 인 경우 서로를 삽입해도 괜찮습니다.

이러한 클래스에 상태를 유지하는 변수를 선언해서는 안됩니다. 최종 변수는 괜찮습니다.

모든 연산이 메소드에 정의되어 있고 클래스의 변수를 사용하지 않으면 수행중인 의존성 삽입이 완전히 안전합니다.

+0

정확하게 내 포인트, 제발 예를 들어, 서비스 클래스 –

+0

에 mybatis 및 jdbc를 사용하여 datasoruce를 autowired 때 동일한 일이 발생한다면 설명해 주시겠습니까, https : //github.com/mkarakaya/spring-boot-multi-module-maven/blob /master/api/src/main/java/com/apiDemo/service/BanksService.java 알다시피, 모든 객체는 메소드에서 생성되어 사용되므로 완전히 무 상태입니다. 저장소 클래스는 싱글 톤입니다. – mokarakaya

+0

답변 주셔서 감사합니다 :) –

0

스프링의 모든 빈은 기본적으로 싱글 톤입니다. 여기에는 @Controller, @Service, @Repository 및 기타 xml 정의 된 bean이 포함됩니다.

당신은 Java basic variable tutorial에서 thisthis

를 읽을 수 : 객체가 필드에 상태를 저장하는 방법과 유사

지역 변수을하는 방법은 종종 지역 변수에 임시 상태를 저장한다 . 지역 변수를 선언하는 문법은 과 비슷합니다 (예 : int count = 0;) 필드를 선언하는 것과 비슷합니다. 로컬 변수로 을 지정하는 특별한 키워드는 없습니다. 이 결정은 변수가 선언 된 위치에서 발생합니다.이 위치는 메서드의 여는 중괄호 ( ) 사이에 있습니다. 따라서 로컬 변수는 선언 된 메소드에서만 볼 수있는 입니다. 나머지 클래스에서는 에 액세스 할 수 없습니다.

+0

고맙지 만 지금까지 내 컨트롤러가 서비스 콩을 autowring 때 어떤 상태를 보유하지 않는 서비스도 또한 stateless 그래서 여러 요청은 단지 스택에있는 클래스의 로컬 멤버를 공유 할 것이라고 의미 이해 다른 요청한 스레드 –

+0

"클래스의 로컬 멤버"라고 할 때 당신은 무엇을 의미합니까? 귀하의 서비스 (또는 다른 구성 요소)가 statefull innner property를 갖기를 원하십니까? – jlumietu

+0

미안하지만 내 실수는 클래스의 로컬 멤버가 아닙니다. 자연스럽게 public 인 클래스의 메소드와 로컬 변수를 의미합니다. –

0

그렇기 때문에 종속 서비스를 선언 할 때 @Autowired을 사용해야합니다. 초기화 프로세스를 직접 인스턴스화하는 대신 Spring 프레임 워크에 효과적으로 전달합니다. Spring은 상태없는 빈만을 가지고 있기 때문에 하나의 상태없는 싱글 톤을 다른 상태없는 싱글 톤에 주입하므로 스레드를 수동으로 관리 할 필요가 없습니다.

관련 문제