복붙노트

[SPRING] 스프링 autowire 인터페이스

SPRING

스프링 autowire 인터페이스

나는 인터페이스 IMenuItem이있다.

public interface IMenuItem {

    String getIconClass();
    void setIconClass(String iconClass);

    String getLink();
    void setLink(String link);

    String getText();
    void setText(String text);

}

그런 다음이 인터페이스 구현이 있습니다.

@Component
@Scope("prototype")
public class MenuItem implements IMenuItem {

    private String iconClass;
    private String link;
    private String text;

    public MenuItem(String iconClass, String link, String text) {
        this.iconClass = iconClass;
        this.link = link;
        this.text = text;
    }

    //setters and getters

}

IMenuItem 인터페이스 만 사용하여 구성 클래스에서 MenuItem의 여러 인스턴스를 만들 수있는 방법이 있습니까? @autowired 또는 무엇인가? 또한 생성자의 인수를 지정하여 자동 와이어 링을 수행 할 수 있습니까?

해결법

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

    1.@Autowired는 실제로이 시나리오에 완벽합니다. 특정 클래스 (구현)를 자동 응답하거나 인터페이스를 사용할 수 있습니다.

    @Autowired는 실제로이 시나리오에 완벽합니다. 특정 클래스 (구현)를 자동 응답하거나 인터페이스를 사용할 수 있습니다.

    다음 예제를 고려하십시오.

    public interface Item {
    }
    
    @Component("itemA")
    public class ItemImplA implements Item {
    }
    
    @Component("itemB")
    public class ItemImplB implements Item {
    }
    

    이제는 @Component 주석 값에 따라 객체의 이름을 선택하여 이러한 구현 중 어느 것을 사용할 것인지 선택할 수 있습니다

    이렇게 :

    @Autowired
    private Item itemA; // ItemA
    
    @Autowired
    private Item itemB // ItemB
    

    동일한 인스턴스를 여러 번 생성하려면 @Qualifier 주석을 사용하여 어떤 구현을 사용할 지 지정할 수 있습니다.

    @Autowired
    @Qualifier("itemA")
    private Item item1;
    

    특정 생성자 매개 변수로 항목을 인스턴스화해야하는 경우 XML 구성 파일을 지정해야합니다. qulifiers와 autowiring 사용법에 관한 좋은 튜토리얼은 여기에서 찾을 수 있습니다.

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

    2.난 당신의 @scope 주석에 의해 일자리의 절반이 이루어집니다, 만약 당신의 프로젝트에 ImenuItem 인터페이스의 다른 구현은 여러 인스턴스를 만들 것입니다

    난 당신의 @scope 주석에 의해 일자리의 절반이 이루어집니다, 만약 당신의 프로젝트에 ImenuItem 인터페이스의 다른 구현은 여러 인스턴스를 만들 것입니다

    @Autowired
    private IMenuItem menuItem
    

    하지만 구현이 여러 개인 경우 @Qualifer 주석을 사용해야합니다.

    @Autowired
    @Qualifer("MenuItem")
    private IMenuItem menuItem
    

    또한 여러 인스턴스를 만듭니다.

  3. from https://stackoverflow.com/questions/31138830/spring-autowire-interface by cc-by-sa and MIT license