2016-09-06 2 views
1

스프링 빈을 다른 빈에 대한 참조로 사용할 수 있습니까? 작동하지 않는 것 같습니다 :스프링 빈은 고유 한 객체를 나타내야합니까?

<bean id="player1" class="some.package.Player" /> 
<bean id="player2" ref="player1" /> 

가능하다면 유용할까요? 지금까지, 나는 모든 bean이 유일한 객체를 나타내야한다고 생각하고 있었지만, 어떤 생각은 내 머리로왔다. 썬은 "public static Sun getInstance()"메소드를 가지고 두 개의 빈을 같은 객체로 만들겠습니까?

<bean id="sun1" class="some.package.Sun" factory-method="getInstance" /> 
<bean id="sun2" class="some.package.Sun" factory-method="getInstance" /> 
+0

관련 : http://stackoverflow.com/questions/2515367/static-factory-method-spring (100 % 중복이 아님) –

+0

이것을 앨리어싱이라고합니다. http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/를 확인하고 별칭 – DwB

+0

과 관련된 검색 : [스프링 기본 범위 싱글 톤인가 여부] (http://stackoverflow.com)/질문/31629993/217324) –

답변

2

<bean id="player2" ref="player1" />

<bean id="player1" class="some.package.Player" />

아래를 보면 나는 당신이 두 개 이상의 이름과 같은 빈을 참조 할 것 같아요. 그렇다면, 당신은 (별칭 개념) 등의 쉼표로 구분 된 목록이나 IDS

<bean id="player1, player2" class="some.package.Player" />

는 이제 재생기 또는 player2 중 하나와 빈을 참조 할 수있을 수 있습니다.

마찬가지로

,

<bean id="sun1" class="some.package.Sun" factory-method="getInstance" /> <bean id="sun2" class="some.package.Sun" factory-method="getInstance" />

<bean id="sun1, sun2" class="some.package.Sun" factory-method="getInstance" />

로 대체 할 수 있으며,이 두 개의 서로 다른 식별자와 같은 빈을 참조 할 수 있습니다.

그리고 유용 앨리어싱 https://vladmihalcea.com/why-i-like-spring-bean-aliasing/에서 인용 할 때 이해하기,

콩 앨리어싱은 우리가 이미 구성 콩을 무시하고 에 다른 객체 정의로 대체 할 수 있습니다. 이것은 대부분 이며 bean 정의가 외부의 리소스로부터 상속 받았을 때 유용합니다.

+0

질문에 대답하지 않습니다, 사실 : sun1.getInstance(). hashCode() == sun2.getInstance(). hashCode()?Java에서 디자인 패턴 싱글 톤은 클래스 로더 레벨에서 작성되는 것과 동일한 객체를 참조 할 것이라고 생각합니다. – agilob

+0

@agilob'getInstance()'가 싱글 톤 구현이라고 가정하면, 예 hashCode는 같고 둘 다 같은 객체를 참조합니다. –

+0

클래스가'public static class'이므로 동일해야합니다. <- 저자가 제공 한 클래스 구현이 무엇인지 추측합니다. – agilob

0

콩은 일반적으로 singletonic, 그래서 그들은 상황 당 하나의 객체 를 나타냅니다. Java의 표준 싱글 톤 디자인 패턴은 클래스 로더 당 하나의 객체 을 생성합니다. 나는 당신의 경우에 Spring Bean으로 한 번, 한 번씩 두 개의 객체를 다시 만들고 자신의 클래스 로더로 한 번 구현을 구현할 것이라고 생각한다. 따라서 해시 코드를 .getInstance().hashCode()을 통해 비교할 때 두 태양은 동일합니다.

관련 문제