IOC-反转控制/ DI-依赖注入
7.1 IOC (inversion of control) – 反转控制
1) 之前我们在学JSP的时候,在CoreServlet中,我们创建xxxDao对象是如何创建的?
IXxxDao xxxDao = new XxxDaoImpl( ) ;
这种写法new了一个XxxDaoImpl类,这样使得CoreServlet和Dao耦合了。
而且IXxxDao xxxDao = new XxxDaoImpl( ) ; 这句代码
如果出现在CoreServlet的某个方法内部,那么xxxDao这个对象的生命周期就是方法的级别。
如果出现在CoreServlet的类中,也就是说xxxDao是一个属性,那么这个xxxDao的生命周期就伴随着CoreServletServlet的生命周期这个级别。
2) 之后我们在applicationContext.xml中定义了这个empService和empDao,然后通过解析XML和反射机制,产生EmpServiceImpl 和 EmpDaoImpl类的对象,然后存在一个map容器当中(map容器在BeanFactory中)。
因此,我们改变了之前service,dao等实例对象的生命周期,控制权从程序员转移到BeanFactory。所以BeanFactory我们可以称为IOC容器。
7.2 DI - Dependency Injection 依赖注入
1)之前,我们在控制层出现的代码:IEmpService empService = new EmpServiceImpl( );那么,控制层和servcie层存在耦合。
2)之后,我们将代码修改成IEmpService empService = null; 然后,在配置文件中配置。
以前是主动new出来的,现在是IOC容器给我们new出来后,通过依赖关系给我们注入的。
当然注入可以通过三种方式来注入:1)属性直接赋值 2)setXxx方法3)构造方法。我们采用的是第一种。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端