可以使用@Qualifier注解明确指定目标bean的id:
package com.atgugui.servlet;
import com.atgugui.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
@Controller
public class BookServlet {
//自动装配,自动为这个属性赋值
//@Qualifier(""):指定一个名字作为id,让该对象不再使用变量名作为id。
@Autowired
@Qualifier("bookService")
private BookService bookServiceExt2;
public void doGet(){
bookServiceExt2.save();
}
}
<!--@Autowired原理:
以实验18为例:
private BookService bookService;
1.先按照类型去容器中找到对应的组件;bookService = ioc.getBean(BookService.class);
1:找到一个,找到就赋值
2:没找到,就抛异常。
3:找到多个,还是会装配上。
1.按照变量名作为id,继续匹配。(就像BookService(id=bookService),而BookServiceExt(id=bookServiceExt))
1.匹配上,就装配。
2.没有匹配上:就继续报错。因为按照变量名作为id时找不到。
@Qualifier:指定变量名的id。
-->
<context:component-scan base-package="com"></context:component-scan>