2013-07-19 2 views
0

빈이 XML을 통해 구성된 경우 해당 생성자에 대한 입력 매개 변수는 항상 동일하므로 프로토 타입으로 범위를 선언하더라도 클래스 인스턴스의 멤버는 모든 객체에서 동일합니다. 그럼, 어떻게 프로토 타입입니까? 예를 들어스프링을 사용하여 프로토 타입 인스턴스를 만드는 방법을 이해할 수 있습니까?

, 내가 누구의 생성자 정수 인수를 취하는 클래스가있는 경우 :

A(int i){} 

내가 XML 빈을 통해 구성 할 경우, 매개 변수 i의 값이 하드 코딩되지 않습니다를? 아니면 클래스를 인스턴스화해야 할 때마다 i에 다른 값을 전달할 수있는 방법이 있습니까?

+0

다음 프로토 타입 인스턴스를 가지는의 사용은 무엇인가? – nishant

+1

물론 있습니다. 생성자 매개 변수를 ['FactoryBean'] (http://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework/beans/factory/FactoryBean.html)에 연결하면됩니다. 어노테이션이 무엇인지 확신 할 수 없기 때문에 Javaland를 떠나기 전에 그 것이 중요하게되었습니다. – millimoose

답변

1

getBean을 직접 사용할 때 값을 제공 할 수 있습니다. 좀 더 우아한 해결책을 원한다면, 스프링 문서에서 '메소드 삽입'을 찾아보십시오.

<bean id="beanA" class="A" scope="prototype"> 
     <constructor-arg index="0" type="java.lang.Integer" value="null"/> 
</bean> 

A bean = (A) applicationContext.getBean("beanA", new Object[]{someInteger}); 
1

모든 인스턴스는 생성 직후 동일합니다. 그러나 상태가 좋다면 일부 작업 후에도 동일하지 않습니다.

물론 bean이 stateless 인 경우 프로토 타입을 만들 수있는 이점이 없습니다.

마지막 질문에 대해서는 SpringEL을 사용하여 매번 다른 값을 반환하는 메소드를 호출 할 수 있습니다. 그런 식으로 모든 인스턴스는 생성 후에 달라집니다.

1

같은 클래스에 원하는만큼 프로토 타입을 선언 할 수

<bean id="beanNegative" class="MyBean" scope="prototype"> 
     <constructor-arg index="0" type="java.lang.Integer" value="-1"/> 
</bean> 

<bean id="beanPositive" class="MyBean" scope="prototype"> 
     <constructor-arg index="0" type="java.lang.Integer" value="1"/> 
</bean> 

<bean id="beanNeutral" class="MyBean" scope="prototype"> 
     <constructor-arg index="0" type="java.lang.Integer" value="0"/> 
</bean> 

값 = "- 1"= "0"와 이름, 값 = "1"값 프로토 타입이 변경됩니다.

자연스럽게, 클래스에 대한 인스턴스 이상을 가지고있을 때부터 클래스에 의한 자동 배선을 수행 할 수 없게됩니다. 종속 Bean에 삽입 할 프로토 타입 인스턴스를 명시 적으로 지정해야합니다.

또한 프로토 타입은 singleton과 다르다. 왜냐하면 bean이 봄에서 나올 때마다 새로운 인스턴스 인 반면 싱글 톤은 app의 다른 모든 bean에 동일한 인스턴스를 제공한다.

최고 감사합니다, Zied 함디 - http://1vu.fr

관련 문제