Lecture06-容器-[实验04]@Autowired

文章目录

    [toc]

    单词词性音标含义
    wirev. / n./waɪə(r)/连接;导线(编程中常比喻“组件间的依赖连接”,如Spring中通过配置将Bean与依赖“wire”起来,建立关联关系)
    wiredadj./ˈwaɪəd/已连接的;有线的(在Spring中表示Bean之间的依赖关系已通过容器自动建立,如“wired dependency”指已完成注入的依赖)
    Autowiredv. (过去分词作形容词)/ˈɔːtəʊˈwaɪəd/自动装配(Spring中的核心注解@Autowired,用于自动注入依赖对象,容器会根据类型匹配并“wire”(连接)对应的Bean,简化手动配置)
    Primaryadj./ˈpraɪməri/主要的;首要的(Spring中@Primary注解用于指定当存在多个同类型Bean时,优先被@Autowired选择的“主要Bean”,解决依赖注入的歧义性)

    Lecture06-容器-[实验04]@Autowired

    image-20251103151838155

    自动装配是相对于手动装配来说的,手动装配就是以前的做法:

    public class TigerServiceImpl implements TigerService {
    
    	// 把 TigerDao 的对象装配给 TigerService,这样在 Service 类中就有 Dao 可以用了
       	private TigerDao tigerDao = new TigerDaoImpl();
    

    一、提出新的需求

    在EmpController中声明方法,模拟处理请求,方法中调用EmpService的方法:

    @Controller
    public class EmpController {
    
        private EmpService empService;
    
        public void showList() {
            List<String> empList = empService.showList();
            for (String emp : empList) {
                System.out.println("emp = " + emp);
            }
        }
    
    }
    

    然后在EmpService方法中调用EmpDao方法:

    @Service
    public class EmpServiceImpl implements EmpService {
        
        private EmpDao empDao;
        
        @Override
        public List<String> showList() {
            return empDao.getList();
        }
    }
    

    然后在EmpDao中查询数据返回:

    @Repository
    public class EmpDaoImpl implements EmpDao {
        @Override
        public List<String> getList() {
            return Arrays.asList("emp_tom", "emp_jerry", "emp_bob");
        }
    }
    

    这里就会遇到一个问题

    • 在EmpController中,如何注入EmpService对象?
    • 在EmpService中,如何注入EmpDao对象?

    二、使用@Autowired注解

    @Controller
    public class EmpController {
    
        @Autowired
        private EmpService empService;
    
        public void showList() {
            List<String> empList = empService.showList();
            for (String emp : empList) {
                System.out.println("emp = " + emp);
            }
        }
    
    }
    

    @Service
    public class EmpServiceImpl implements EmpService {
    
        @Autowired
        private EmpDao empDao;
    
        @Override
        public List<String> showList() {
            return empDao.getList();
        }
    }
    

    end