对sprig框架中控制反转(依赖注入)的理解
来源:互联网 发布:淘宝五金冠店 编辑:程序博客网 时间:2024/06/05 17:09
package zj.zgs.dao;public interface UserDao {public void getUser();}package zj.zgs.dao.impl;import zj.zgs.dao.UserDao;public class UserDaoMySqlImpl implements UserDao {@Overridepublic void getUser() {// TODO Auto-generated method stubSystem.out.println("MySql获取用户数据");}}package zj.zgs.dao.impl;import zj.zgs.dao.UserDao;public class UserDaoOracleImpl implements UserDao {@Overridepublic void getUser() {// TODO Auto-generated method stubSystem.out.println("Oracle获取用户数据");}}package zj.zgs.service;public interface UserService {public void getUser();}package zj.zgs.service.impl;import zj.zgs.dao.UserDao;import zj.zgs.service.UserService;public class UserServiceImpl implements UserService{//private UserDao userDao = new UserDaoMySqlImpl(); // 之前是上面这种做法,由调用者(UserServiceImpl类的实例)创建被调用者(UserDaoMySqlImpl类的实例),但是这样就存在一个问题,之前我们获取的是MySql的数据,现在我们增加了一个Oracle的数据库,这样就需要程序能够获取Oracle类型的数据,为了获取Oracle数据就学要修改之前写的代码,将所有UserDaoMySqlImpl改为UserDaoOracleImpl,这样维护起来工作量太大,而且繁琐。//后来我们就使用下面这种方式,先不关心依赖类的创建,并给调用者提供一个set方法,用来设置被调用者的类型,这样就将被调用者的创建解耦,被调用者的类型完全取决于外部的注入。private UserDao userDao = null;public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic void getUser() {// TODO Auto-generated method stubuserDao.getUser();}}package zj.zgs.test;import zj.zgs.dao.impl.UserDaoMySqlImpl;import zj.zgs.dao.impl.UserDaoOracleImpl;import zj.zgs.service.impl.UserServiceImpl;public class Test {public static void main(String[] args) {UserServiceImpl userService = new UserServiceImpl();userService.setUserDao(new UserDaoMySqlImpl());userService.getUser();System.out.println("================================");userService.setUserDao(new UserDaoOracleImpl());userService.getUser();}}
通过上面的案例:
被调用者由原来调用者程序本身创建,变为了程序接收外部的注入。
程序员主要精力集中在于业务实现,而不用关注类创建这复杂的过程。
实现了service和dao的解耦工作。Service层和dao层实现了分离。没有直接依赖关
系。
如果dao的实现发生改变,应用程序本身不需要改变。
依赖注入可以用下面这个例子进行理解。一个人(Java实例,调用者)需要一把斧子(Java实例,被调用者)。
在很久之前,没有做斧子的工厂,商店也没有斧子卖,如果你需要一把斧子,就得自己去打造一把斧子。
后来慢慢发展,有生产斧子的工厂,商店就有斧子卖,如果你现在需要一把斧子,只需要到商店,让导
购员给你一把斧子就OK。而你不用去关心斧子的创建过程,可以把所有的精力放在砍柴上。
哈哈,我是这么理解的,可能说的有些牵强,但是大概意思应该是可以理解的。希望对需要的人有所帮助。
0 0
- 对sprig框架中控制反转(依赖注入)的理解
- 对PHP中依赖注入和控制反转的理解
- 对控制反转/依赖注入的理解
- 对依赖注入- 控制反转的理解
- Spring框架(依赖注入)(控制反转)的理解
- 对spring控制反转以及依赖注入的理解
- 对spring控制反转以及依赖注入的理解
- 对依赖注入,控制反转,反射的理解
- 对spring控制反转以及依赖注入的理解
- 依赖注入与控制反转的理解
- spring控制反转,依赖注入的理解
- 依赖注入与控制反转的理解
- 依赖注入和控制反转的理解
- 依赖注入和控制反转的理解
- 理解依赖注入(控制反转)!
- 谈谈对Spring 控制反转(IOC)及依赖注入(DI)的理解
- spring搭建,为什么用spring,对控制反转,依赖注入的理解
- Java的依赖注入(控制反转)
- Android自定义View——彩色圆环统计图
- stm8s开发(六) EXIT的使用:做一个外部中断的按钮!
- 「iOS 100天学习计划」第十五天
- 【BLE-CC2640】CC2640之主机端获取广播包数据
- Android Launcher2 修改workspace屏幕数量
- 对sprig框架中控制反转(依赖注入)的理解
- Java 学习心得(1)
- 打印从1到最大n位数
- 单片机==共阴数码管(3)
- 公路乘车
- 3-5 学生成绩统计
- android API中文版
- Mysql基础操作
- 数字在排序数组中出现的次数