2013-08-02 2 views
0

나는이 질문이 100 번 전에 제기되었지만 질문을 찾지 못했기 때문에 다른 stackoverflow 답변을 참조하도록 자유롭게 느낀다.Spring을 사용하여 비 - 빈 인스턴스 생성하기

대부분의 Spring 사용자는 주입이 필요한 단일이 아닌 bean에 대해 무엇을합니까? 예를 들어, 매번 새로운 인스턴스를 생성하려는 고객과 같은 클래스가 있습니다. 이것이 엔티티이고 @PreRemove 또는 다른 곳에서 반복 할 청취자를 삽입하려고합니다. 일반적인 해결책은 @Configurable을 사용하는 것입니다. 그러나 이것은 거의 해결 방법 인 것처럼 보입니다.이 문제를 처리 할 수있는보다 표준적인 방법이 있는지 궁금합니다.

내가 생각할 수있는 유일한 점은 관리 Bean 인 CustomerRepository 클래스에 factory newCustomer 인스턴스 메소드를 만드는 것입니다. 그런 다음 고객 (가장 자연스러운 장소)에 리스너를 삽입하는 대신 CustomerRepository에 해당 리스너를 삽입하고 Customer (새 고객) (injectListeners)에 대한 명시 적 생성자 인수로 지정합니다.

사람들은 구성 가능을 사용하는 경향이 있습니까? 아니면 비 단독 인스턴스를 주입하는 더 좋은 방법이 있습니까? 아니면 대부분의 사용자가 위와 같이 factory 메소드를 작성합니까? 엔티티 예제는 단지 예제 일 뿐이며, non-singleton이 아닌 다른 오브젝트가 있으며 일반적으로 new'd이지만 주입이 필요합니다.

Guice와 같이 다르게 처리 할 수 ​​있습니까? JSR-330 기능 만 사용하면 어떻게됩니까?

+0

당신이 당신의 고객 개체로 주입 무엇 : 당신은 너무이 주석을 사용할 수 있습니다

? 바로 거기에서 의심스러운 소리가납니다. –

+0

@PreRemove에 대한 임의의 청취자 세트 만 해당 특정에 있습니다. –

답변

0

원하는 경우 bean을 non-singleton으로 만들 수 있습니다. XML 사용 여부에 따라 달라집니다.

<bean id="beanA" class="misc.BeanClass" scope="prototype"> 
    <property ... /> 
</bean> 

이렇게하면 언제나 새로운 인스턴스를 얻을 수 있습니다. 각 인스턴스는 주입 된 값으로 초기화됩니다.

@Scope("prototype") 
+0

그것은 주입이 필요한 고객 클래스를 처리하는 방법입니까? 콩으로 만드시겠습니까? 과잉 보인다. 나는 빈을 주입 할 수있는 모든 비 서비스 객체를 만드는 것보다 더 나은 패턴을 놓치고 있다고 생각한다. –

+0

그리고 bean 인 경우에는 "new Customer()"대신 #getBean 또는 일부를 사용해야한다는 디자인을 설명하는 문제가 있습니다. –

+1

당신을 위해 정적 인'getInstance()'메소드를 가질 수 있습니다. 또는. "new Customer()"를 사용하면 생성자에 코드를 넣고'getBean()'을 호출하고 저장하는 작업을 수동으로 삽입 할 수 있습니다. 그것들이 많이있는 경우, 인젝터 코드를 상위 생성자에 넣고 일반화하십시오. –

관련 문제