⼀个接⼝多个实现类的Spring注⼊⽅式,,controller层如何操作
1. ⾸先, Interface1 接⼝有两个实现类 Interface1Impl1 和 Interface1Impl2 Interface1 接⼝:ample.service;
/**
* Created by liuzh on 2018-05-29.
* 接⼝1
*/
public interface Interface1 {
void fun1();
}
以下是接⼝的两个实现类,请注意@service注解的使⽤⽅式,这⾥给每个实现类标注了不同的名称,⽅便在@Resource注⼊时区别注⼊ Interface1 接⼝实现类1:
@Service("s1")
public class Interface1Impl1 implements Interface1 {
@Override
public void fun1(){
System.out.println("接⼝1实现类 ...");
}
public void fun2(){
System.out.println("接⼝1实现类1 fun2 ...");
}
}
Interface1 接⼝实现类2:
@Service("s2")
public class Interface1Impl2 implements Interface1 {
@Override
public void fun1(){
System.out.println("接⼝1实现类 ...");
}
public void fun2(){
System.out.println("接⼝1实现类2 fun2 ...");
}
}
2. 通过 @Autowired 和 @Qualifier 配合注⼊
@Qualifier("Interface1Impl1")
Interface1 interface1;//正常启动
3. 使⽤@Resource注⼊,根据@Service指定的名称区分
@Resource(name ="s1")
Interface1 interface1;//正常启动
调⽤的时候:
public class RelateModelController extends BaseController{
@Qualifier("Interface1Impl2")
private Interface1 Interface1Impl2 ; //装配实现类2
initParamProcess(Interface1Impl2 ,new RelateModel(),new Page());//初始化实现类
2,关键在这步,指定Interface1Impl2 为beaseService,具体见BaseController类
int totalCount = TotalCount(jdbcBean);//然后直接调⽤实现类2法,输出为2
resource和autowired注解的区别}
RelateModelController 的⽗类BaseController
public abstract class BaseController {
void initParamProcess(CsBaseService beaseService, JDBCBean jdbcBean,Pagepage) {
this.beaseService = beaseService; //指定哪个实现类为beaseService
this.jdbcBean = jdbcBean;
this.page = page;
}
}
总结:
1、@Autowired 是通过 byType 的⽅式去注⼊的, 使⽤该注解,要求接⼝只能有⼀个实现类。
2、@Resource 可以通过 byName 和 byType的⽅式注⼊, 默认先按 byName的⽅式进⾏匹配,如果匹配不到,再按 byType的⽅式进⾏匹配。
3、@Qualifier 注解可以按名称注⼊, 但是注意是 类名。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论