[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.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.@Bean 주석 인 java-config가 필요합니다.
@Bean 주석 인 java-config가 필요합니다.
클래스를 @Configuration으로 정의하고 메소드를 @Bean으로 정의하십시오.
-
==============================
3.스프링 컴포넌트는 또한 팩토리 메소드를 정의 할 수있다. 문서에서 잘라낸 것 :
스프링 컴포넌트는 또한 팩토리 메소드를 정의 할 수있다. 문서에서 잘라낸 것 :
@Component public class FactoryMethodComponent { @Bean @Qualifier("public") public TestBean publicInstance() { return new TestBean("publicInstance"); } public void doWork() { // Component method implementation omitted } }
-
==============================
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;
from https://stackoverflow.com/questions/14779994/annotation-based-factory-methods by cc-by-sa and MIT license