2011-09-29 5 views
0

의 ApplicationContext 봄에서 콩을 얻을 수 있습니다 . 여기서 많은 게시물에서 getBean 메서드를 사용하여 applicationContext에서 singleton 또는 new 인스턴스를 가져 오지 말아야한다는 것을 읽었습니다. 그러나 나는 나의 경우를 위해 그것을 할 적절한 방법을 찾을 수 없습니다. @Resource를 사용했는데 작동하는 것처럼 보이지만 정적 필드는 지원하지 않습니다. Thanx올바른 방법은 내가 인스턴스를 생성하는 공장

답변

2

봄에 이것을 수행하는 방법은 많이 있지만 가장 확실한 방법은 JavaConfig을 사용하는 것입니다.

@Configuration 
public class myFactory { 
    @Bean 
    public static getInstance() { 
     switch(someInt) { 
      case 1: 
       return new MySpringBean(); 
      case 2: 
       return new MyOtherSpringBean(); 
     } 
    } 
} 
0

한 가지 방법은 콩의 인스턴스를 (각각을 구현하는 팩토리 클래스를 생성하고 저장할 수 있습니다 : 당신이 사용할 수 JavaConfig 주석을 스프링을 사용하는 경우에 당신은 당신의 bean을 구성하고 애플리케이션 컨텍스트에 추가하려면 다음을 수행 할 수 지도에서 일부 키 아래 값으로 공통 인터페이스 MyBean) (beans) :

public class MyBeanFactory { 

    private Map<Integer, MyBean> beans; 

    public MyBean create(Integer which) { 
     if (which != null) 
      return beans.get(which); 
     else 
      throw new IllegalArgumentException("Unknown bean"); 
    } 

    public void setBeans(Map<Integer, MyBean> beans) { 
     this.beans = beans; 
    } 
} 

당신의 봄에서 applicationContext.xml 이제 공장의를 빈을 작성하고 콩 설정 :

을 10

마지막으로 평소와 같이 빈 팩토리를 삽입하고 예를 들어 같은 인스턴스를 가져올 수 있습니다. 이 :

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath:/applicationContext.xml" }) 
public class MyBeanFactoryTest { 

    @Autowired 
    private MyBeanFactory myBeanFactory; 

    @Test 
    public void test() { 
     Assert.assertTrue(myBeanFactory.create(1) instanceof MyBeanA); 
     Assert.assertTrue(myBeanFactory.create(2) instanceof MyBeanB); 
    } 

} 
0

당신은 자신 공장있는 개체에 대한 org.springframework.beans.factory.FactoryBean 인터페이스를 구현합니다.

FactoryBean 인터페이스는 Spring IoC 컨테이너의 인스턴스화 로직에 대한 플러그 가능 지점이다. XML의 (잠재적 인) 대량의 XML과 대비되는 Java로 표현 된 복잡한 초기화 코드가있는 경우, 사용자 고유의 FactoryBean을 작성하고 해당 클래스 내에 복합 초기화를 작성한 후 사용자 정의 FactoryBean을 컨테이너에 연결할 수 있습니다.

  • Object getObject() :이 factory가 생성하는 객체의 인스턴스를 반환

    의 FactoryBean 인터페이스는 세 가지 방법을 제공합니다. 이 팩토리가 싱글 톤 (singleton) 또는 프로토 타입 (prototype)을 반환하는지 여부에 따라 인스턴스를 공유 할 수 있습니다.

  • boolean isSingleton() :이 FactoryBean이 싱글 톤을 반환하면 true를 반환하고 그렇지 않으면 false를 반환합니다.

  • Class getObjectType()는 : 유형이 사전

에 알려져 있지 않은 경우 Spring Docs

를 살펴 보자 방법 또는는 null으로 getObject()에 의해 반환되는 개체 유형을 반환
관련 문제