跳到主要内容

简述Spring中@Primary注解 ?

参考答案:

在Spring框架中,@Primary是一个注解,它用于解决自动装配时的歧义。当Spring容器中存在多个同类型的Bean时,Spring通常无法确定应该注入哪一个Bean。在这种情况下,@Primary注解可以帮助Spring选择一个首选的Bean进行注入。

具体来说,当你有一个接口或类有多个实现,并且你希望Spring在自动装配时选择其中一个实现作为默认选择时,你可以在该实现类上使用@Primary注解。这样,当Spring在尝试自动装配该类型的Bean时,会首先考虑带有@Primary注解的Bean。

例如,假设你有一个MessageService接口和两个实现类EmailMessageServiceSmsMessageService。你可能希望默认情况下使用EmailMessageService,但在某些情况下你可能希望使用SmsMessageService。在这种情况下,你可以将@Primary注解添加到EmailMessageService类上,这样Spring就会默认选择EmailMessageService进行注入。

public interface MessageService {
    void sendMessage(String message);
}

@Service
@Primary
public class EmailMessageService implements MessageService {
    @Override
    public void sendMessage(String message) {
        System.out.println("Sending email message: " + message);
    }
}

@Service
public class SmsMessageService implements MessageService {
    @Override
    public void sendMessage(String message) {
        System.out.println("Sending SMS message: " + message);
    }
}

在这个例子中,当你尝试自动装配MessageService类型的Bean时,Spring会默认选择EmailMessageService进行注入。但如果你明确指定了要注入的Bean,或者在一个配置类中明确指定了要使用的Bean,那么Spring就会按照你的指示进行操作。

总之,@Primary注解提供了一种方便的方式来指定在存在多个同类型Bean时的默认选择。