[SPRING] Spring 3 @Component 및 정적 팩토리 메서드
SPRINGSpring 3 @Component 및 정적 팩토리 메서드
객체를 생성하기 위해 정적 팩토리 메소드를 작성하는 경우 해당 팩토리 클래스에 '@Component'주석을 사용하고 해당 클래스의 빈을 만들기 위해 호출해야하는 정적 팩토리 메소드를 (일부 주석으로) 표시하려면 어떻게해야합니까? 다음은 내가 의미하는 의사 코드입니다.
@Component
class MyStaticFactory
{
@<some-annotation>
public static MyObject getObject()
{
// code to create/return the instance
}
}
해결법
-
==============================
1.나는 당신이 이것을 현재 할 수 없다는 것을 두려워합니다. 그러나 Java 구성에서는 매우 간단합니다.
나는 당신이 이것을 현재 할 수 없다는 것을 두려워합니다. 그러나 Java 구성에서는 매우 간단합니다.
@Configuration public class Conf { @Bean public MyObject myObject() { return MyStaticFactory.getObject() } }
이 경우 MyStaticFactory에는 Spring 주석이 필요하지 않습니다. 물론 좋은 ol 'XML을 대신 사용할 수 있습니다.
-
==============================
2.FactoryBean 인터페이스를 사용해야한다.
FactoryBean 인터페이스를 사용해야한다.
인터페이스를 구현하고 그것에 대한 bean을 선언하십시오. 예 :
@Component class MyStaticFactoryFactoryBean implements FactoryBean<MyStaticFactory> { public MyStaticFactory getObject() MyStaticFactory.getObject(); } public Class<?> getObjectType() { return MyStaticFactory.class; } public boolean isSingleton() { return true; } }
@Component 및 구성 요소 검색을 통해이 클래스가 검색됩니다. Spring은 그것이 FactoryBean임을 감지하고 getObject에서 반환하는 객체를 bean (사용자가 지정한 경우 싱글 톤)으로 노출합니다.
또는이 FactoryBean 클래스에 @Bean 또는
선언을 제공 할 수 있습니다. -
==============================
3.콩:
콩:
public class MyObject { private String a; public MyObject(String a) { this.a = a; } @Override public String toString() { return a; } }
FactoryBean :
@Component public class MyStaticFactory implements FactoryBean<MyObject> { @Override public MyObject getObject() throws Exception { return new MyObject("StaticFactory"); } @Override public Class<?> getObjectType() { return MyObject.class; } @Override public boolean isSingleton() { return true; } }
용도:
@Component public class SomeClass{ @Autowired MyObject myObject; }
from https://stackoverflow.com/questions/9598829/spring-3-component-and-static-factory-method by cc-by-sa and MIT license