Spring Autowired annotation with service implementation

时间:2016-09-27 16:38:08

标签: spring

我在下面的场景中几乎没有怀疑。

有一个接口和两个实现类:

接口:

int x;
;

x = yourTable.YourField;
if (x >= 1 && x <= 15)
{
    return YourEnum::1to15;
}
else if (x >= 16 && x <= 20)
{
    return YourEnum::16to20;
}
// other possible ranges
else
{
    throw YourEnum::Unknown;
}

第一个实施类:

interface ServiceInt
{
   public void save();
}

第二个实施类:

Public class ServiceIntImpOne implements ServiceInt
{
   public void save()
   {
     // I am first service implementation
   }

}

调用实现类的save方法的主类:

Public class ServiceIntImpTwo implements ServiceInt
{
   public void save()
   {
     // I am Second service implementation
   }

}

我的问题:

  1. Public class controller { @Autowired ServiceInt; public void save() { ServiceInt.save() } } - 它会调用服务类实现的保存方法吗?
  2. 我们如何使用ServiceInt.save()类的保存方法实现?
  3. 自动装配是如何工作的?

2 个答案:

答案 0 :(得分:3)

  

ServiceInt.save() - 保存服务类实现的方法   它会调用吗?

如果您有两个相同类型的bean(通过注释或通过xml定义的bean),当您自动装配该bean时它将失败(抛出异常),因为Spring不知道要注入的bean。

caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
    No unique bean of type [ServiceInt] is defined:
  

我们如何使用ServiceIntImpTwo的save方法实现   类?

如果您在xml文件中定义了bean,则可以使用id属性

<bean id="beanTwo" class="ServiceIntImpTwo" />

然后您可以使用限定符注释

进行自动装配
@Autowired
@Qualifier("beanTwo")
ServiceInt myServiceTwo;

如果您使用的是注释。

@Component
Class ServiceIntImpTwo impl...{}

然后你可以自动装载

@Autowired
@Qualifier("serviceIntImpTwo ")
ServiceInt myServiceTwo;
  

自动装配是如何工作的?

您可以在互联网上阅读。

http://memorynotfound.com/handling-multiple-autowire-dependencies-with-spring-qualifier/ https://www.mkyong.com/spring/spring-autowiring-qualifier-example/ https://www.tutorialspoint.com/spring/spring_qualifier_annotation.htm

答案 1 :(得分:0)

如果你有两个实现到一个接口,你需要提供一个弹簧提示使用哪个:

  1. 您可以使用@Qaulifier注释
  2. 您可以使用@Profile并选择有效的个人资料。