복붙노트

[SPRING] 어노테이션 기반 팩토리 메소드

SPRING

어노테이션 기반 팩토리 메소드

싱글 톤 bean (foo)을 autowire 할 수 있기를 원한다.

@Component
public class FooUser {

  @Autowire Foo foo;
}

다른 싱글 톤의 메소드에 의해 생성 된 (FooFactory.createFoo)

@Service
public class FooFactory {

  public Foo createFoo() {...}
}

xml은 단순히 factory-method입니다. 주석으로 어떻게 처리 할 수 ​​있습니까?

해결법

  1. ==============================

    1.Java @Configuration을 대신 사용해보십시오 :

    Java @Configuration을 대신 사용해보십시오 :

    @Configuration 
    public class Config {
    
        @Bean
        public FooUser fooUser() {
            return new FooUser(foo());
        }
    
        @Bean
        public FooFactory fooFactory() {
            return new FooFactory();
        }
    
        @Bean
        public Foo foo() {
            return fooFactory().createFoo();
        }
    
    }
    
  2. ==============================

    2.@Bean 주석 인 java-config가 필요합니다.

    @Bean 주석 인 java-config가 필요합니다.

    클래스를 @Configuration으로 정의하고 메소드를 @Bean으로 정의하십시오.

  3. ==============================

    3.스프링 컴포넌트는 또한 팩토리 메소드를 정의 할 수있다. 문서에서 잘라낸 것 :

    스프링 컴포넌트는 또한 팩토리 메소드를 정의 할 수있다. 문서에서 잘라낸 것 :

    @Component
    public class FactoryMethodComponent {
    
      @Bean @Qualifier("public")
      public TestBean publicInstance() {
          return new TestBean("publicInstance");
      }
    
      public void doWork() {
          // Component method implementation omitted
      }
    }
    
  4. ==============================

    4.FactoryBean Spring 인터페이스를 사용하십시오. 그럼 당신은 T 자체를 autowire 수있을 것입니다

    FactoryBean Spring 인터페이스를 사용하십시오. 그럼 당신은 T 자체를 autowire 수있을 것입니다

    편집하다: BeanFactory는 Spring의 인터페이스로 구현하면 다음과 같이 객체의 팩토리를 만들 수 있습니다.

    public class FooFactoryBean implements FactoryBean<Foo>{
       .................. 
       } 
    

    다음과 같이 bean을 초기화 할 수 있습니다.

    @Bean
    public FooFactoryBean foo(){ 
          return new FooFactoryBean(); 
        } 
    

    그렇다면 Foo를 autowired한다면 Spring은 FooFactoryBean이 원하는 팩토리임을 이해할 것이다.

       @Autowired
           Foo foo;
    
  5. from https://stackoverflow.com/questions/14779994/annotation-based-factory-methods by cc-by-sa and MIT license