简述Spring中@Primary注解 ?
参考答案:
在Spring框架中,@Primary
是一个注解,它用于解决自动装配时的歧义。当Spring容器中存在多个同类型的Bean时,Spring通常无法确定应该注入哪一个Bean。在这种情况下,@Primary
注解可以帮助Spring选择一个首选的Bean进行注入。
具体来说,当你有一个接口或类有多个实现,并且你希望Spring在自动装配时选择其中一个实现作为默认选择时,你可以在该实现类上使用@Primary
注解。这样,当Spring在尝试自动装配该类型的Bean时,会首先考虑带有@Primary
注解的Bean。
例如,假设你有一个MessageService
接口和两个实现类EmailMessageService
和SmsMessageService
。你可能希望默认情况下使用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时的默认选择。