Servlet23 - IOC & DI
IOC Inversion of Control 控制反转
之前,在 Servlet 中,我们创建 service 对象:FruitService fruitService = new FruitServiceImpl();
- 如果是在 Servlet 的某个方法中创建对象,则 这个 fruitService 对象的作用域(生命周期)就是这个方法级别
- 如果是在 Servlet 的类中创建对象,则这个 fruitService 对象是一个成员变量,这个对象的作用域(生命周期)就是这个 Servlet 实例级别的,从 Servlet 的实例化开始到销毁
之后,在 applicationContext.xml 中定义了 fruitService,然后通过解析 XML,产生 fruitService 实例,存放在 beanMap 中,beanMap 在一个 BeanFactory 类中实现,每个 Service 实例对象从 beanMap 容器开始创建是产生,容器销毁前销毁,即 Service、DAO 等等实例对象的生命周期被转移了,控制权从程序员转移到 BeanFactory 类中
DI Dependency Injection 依赖注入
之前,在 Controller 层创建 Service 实例:FruitService fruitService = new FruitServiceImpl();
- FruitController 与 FruitService 两个不同层存在耦合
之后,在 applicationContext.xml 文件中配置 bean 标签,每一个 bean 标签对应一层,层间关系通过 bean 标签的子标签 property 实现 -- 即,层间关系不同手动创建实例对象,而是通过 bean 容器实现依赖注入
-
<beans> DAO 层 <bean id="fruitDAO" class="com.atguigu.fruit.dao.impl.FruitDAOImpl"/> <bean id="fruitService" class="com.atguigu.fruit.service.impl.FruitServiceImpl"> <!-- property标签用来表示属性;name表示属性名;ref表示引用其他bean的id值--> <property name="fruitDAO" ref="fruitDAO"/> </bean> <bean id="fruitController" class="com.atguigu.fruit.controllers.FruitController"> <property name="fruitService" ref="fruitService"/> </bean> </beans>
-
DAO 层,实现各种操作数据库的单精度方法
-
<bean id="fruitDAO" class="com.atguigu.fruit.dao.impl.FruitDAOImpl"/>
-
-
Service 层
-
Service 层,提供服务、完成实际业务,需要调用 DAO 层方法 - 设置 property 子标签表层间关系
-
<bean id="fruitService" class="com.atguigu.fruit.service.impl.FruitServiceImpl"> <!-- property标签用来表示属性;name表示属性名;ref表示引用其他bean的id值--> <property name="fruitDAO" ref="fruitDAO"/> </bean>
-
-
Controller 层
-
Controller 层,接受请求、响应请求,需要调用 Service 层方法 - 设置 property 子标签表层间关系
-
<bean id="fruitController" class="com.atguigu.fruit.controllers.FruitController"> <property name="fruitService" ref="fruitService"/> </bean>
-
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析