복붙노트

[SPRING] 나는 열거 봄의 @Component를 할 수 있습니까?

SPRING

나는 열거 봄의 @Component를 할 수 있습니까?

내 implementatons 중 하나에 대한 열거 싱글 톤 패턴 다음 봄 3.0.x 버전을 사용하고 있습니다.

public enum Person implements Nameable {
    INSTANCE;

    public String getName(){
        // return name somehow (Having a variable but omitted for brevity)
    }
}

최근에 우리는 내 클래스에 @Component를 추가해야하므로 스프링을 통해 그 유형을 수집하기 시작했다.

@Component
public enum Person implements Nameable {
    INSTANCE;

    public String getName(){
        // return name somehow (Having a variable but omitted for brevity)
    }
}

및 수집 방법은

@Autowired
public void collectNameables(List<Nameable> all){
    // do something 
}

이 일 후에 내가 실패를 관찰하고 원인은 봄 (이해할 수있는) 열거 형 클래스를 초기화하기 수 있었다. 내 질문은 - 나는 빈으로 내 열거 클래스를 표시 할 수있는 다른 방법 usign이 있습니까? 아니면 내가 내 구현을 변경해야?

해결법

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

    1.당신이 정말로 (봄 콩은 기본적으로 싱글이 있다는 사실에도 불구하고) ENUM 기반의 싱글을 사용해야하는 경우, 당신은 Spring 컨텍스트에서 해당 콩을 등록하는 다른 방법을 사용해야합니다. 예를 들어, XML 구성을 사용할 수 있습니다 :

    당신이 정말로 (봄 콩은 기본적으로 싱글이 있다는 사실에도 불구하고) ENUM 기반의 싱글을 사용해야하는 경우, 당신은 Spring 컨텍스트에서 해당 콩을 등록하는 다른 방법을 사용해야합니다. 예를 들어, XML 구성을 사용할 수 있습니다 :

    <util:constant static-field="...Person.INSTANCE"/>
    

    또는의 FactoryBean을 구현 :

    @Component
    public class PersonFactory implements FactoryBean<Person> {
        public Person getObject() throws Exception {
            return Person.INSTANCE;
        }
    
        public Class<?> getObjectType() {
            return Person.class;
        }
    
        public boolean isSingleton() {
            return true;
        }
    }
    
  2. ==============================

    2.당신은 당신이 의존성 주입을 관리하기 위해 스프링을 사용하는 경우 열거 싱글 톤 패턴을 사용할 필요가 없습니다. 당신은 일반 클래스로 사람을 변경할 수 있습니다. 봄은 그래서 모든 봄 주입 오브젝트가 같은 인스턴스를 얻을 것이다, 싱글의 기본 범위를 사용합니다.

    당신은 당신이 의존성 주입을 관리하기 위해 스프링을 사용하는 경우 열거 싱글 톤 패턴을 사용할 필요가 없습니다. 당신은 일반 클래스로 사람을 변경할 수 있습니다. 봄은 그래서 모든 봄 주입 오브젝트가 같은 인스턴스를 얻을 것이다, 싱글의 기본 범위를 사용합니다.

  3. from https://stackoverflow.com/questions/5802634/can-i-have-springs-component-on-enum by cc-by-sa and MIT license