spring中,一个接口两个实现类,注入问题

本文详细介绍了Spring框架中基于接口的依赖注入过程。包括如何通过@Component注解定义组件,并通过@Autowired进行依赖注入。此外还讲解了当存在多个实现类时,如何通过@Service注解的value属性来指定具体的注入实现。

interface:Cus1

   @Component

实现:Customer implents Cus1(){

syso("1")

}

@Component

Customer2 implents Cus1(){

syso("1")

}


属性注入:

@Service(value="customerService")

CustomerService(){

@Autowired
private Cus1 customer;

}


要注入的类,首先按类型匹配。这里两个类同一个接口,所以继续以value分辨,不写value时,value是下面这句。

然后value名和private Cus1  这里的变量名相同,就注入他,没找到相同的,就报错


value:指定beanid。如果不指定value属性,默认beanid是当前类的类名。首字母小写。


Spring中,当两个实现一个接口时,Spring对这些bean的管理方式涉及多方面。首先,直接使用实现类接收Bean可能不优雅,在低版本Spring还可能出现注入错误,而使用Bean别名和接口接收代码更优雅,且通过name注入,能一定程度避免依赖循环问题[^1]。 当有多个实现类时,可以使用`List<?>`来接收所有实现类,但需要根据规则对`List`排序,因为不排序可能不清楚使用的是哪个实现类。不过关于Spring源码对多个实现类的`List`接收顺序暂未提及具体内容,有兴趣可进一步了解[^1]。 在注入方面,通常写Service层服务时,习惯定义一个service接口一个service实现类,引用时通过`@Resource`注解或者`@Autowired`注解,Spring会根据名称优先或型优先注入Bean。当有两个实现类实现同一接口时,同样遵循这样的注入规则,但可能需要额外处理以明确具体注入哪个实现类[^5]。 ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; // 定义接口 interface MyService { void doSomething(); } // 实现类1 @Service("service1") class MyServiceImpl1 implements MyService { @Override public void doSomething() { System.out.println("Service 1 is doing something."); } } // 实现类2 @Service("service2") class MyServiceImpl2 implements MyService { @Override public void doSomething() { System.out.println("Service 2 is doing something."); } } // 使用List接收所有实现类 @Service class MyServiceConsumer { @Autowired private List<MyService> myServices; public void executeServices() { for (MyService service : myServices) { service.doSomething(); } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值