복붙노트

[SPRING] Spring 3 @Component 및 정적 팩토리 메서드

SPRING

Spring 3 @Component 및 정적 팩토리 메서드

객체를 생성하기 위해 정적 팩토리 메소드를 작성하는 경우 해당 팩토리 클래스에 '@Component'주석을 사용하고 해당 클래스의 빈을 만들기 위해 호출해야하는 정적 팩토리 메소드를 (일부 주석으로) 표시하려면 어떻게해야합니까? 다음은 내가 의미하는 의사 코드입니다.

@Component
class MyStaticFactory
{
    @<some-annotation>
    public static MyObject getObject()
    {
        // code to create/return the instance
    }
}

해결법

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

    1.나는 당신이 이것을 현재 할 수 없다는 것을 두려워합니다. 그러나 Java 구성에서는 매우 간단합니다.

    나는 당신이 이것을 현재 할 수 없다는 것을 두려워합니다. 그러나 Java 구성에서는 매우 간단합니다.

    @Configuration
    public class Conf {
    
        @Bean
        public MyObject myObject() {
            return MyStaticFactory.getObject()
        }
    
    }
    

    이 경우 MyStaticFactory에는 Spring 주석이 필요하지 않습니다. 물론 좋은 ol 'XML을 대신 사용할 수 있습니다.

  2. ==============================

    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. ==============================

    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;
    }
    
  4. from https://stackoverflow.com/questions/9598829/spring-3-component-and-static-factory-method by cc-by-sa and MIT license