2016-09-27 89 views
2

我在下面的场景中几乎没有怀疑。带有服务实现的Spring Autowired注释

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

接口:

interface ServiceInt 
{ 
    public void save(); 
} 

首先实现类:

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

} 

二实现类:

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

} 

Main类调用保存的实现类的方法:

Public class controller 
{ 
    @Autowired ServiceInt; 

    public void save() 
    { 
    ServiceInt.save() 
    } 
} 

我的问题:

  1. ServiceInt.save() –其保存服务类实现的方法将它调用?
  2. 我们如何使用ServiceIntImpTwo类的保存方法实现?
  3. 自动装配是如何工作的?
+0

我编辑我的回答 – reos

回答

2

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

如果你有相同类型(通过注释或通过XML定义的bean)的两个bean当你自动装配豆类它会失败(抛出异常),因为春天不知道什么注入豆。

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

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

如果你在一个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

+0

你提到@Qualifier(“serviceIntImpTwo”),但是从那里值“serviceIntImpTwo”会来,因为我们还没有注释的情况下,任何地方定义这个值。 –

+0

默认情况下,Spring为bean创建一个名称,它与该类相同,但小写的第一个字符 – reos

+0

非常感谢您的帮助:) –

0

如果你有两种实现一个接口,你需要提供春季提示使用哪一个:

  1. 可以使用@Qaulifier注释
  2. 可以使用@Profile,选择活动的配置文件。