首页 > 其他分享 >SpringIOC理论推导

SpringIOC理论推导

时间:2023-04-23 17:35:17浏览次数:40  
标签:SpringIOC userDao Service 推导 理论 Dao UserDao IOC public

IOC理论

引入

原来实现业务的步骤:

  1. Dao层接口
  2. Dao层实现类
  3. Service层接口
  4. Service层实现类

eg:

  1. Dao层接口

    public interface UserDao {
        void getUser();
    }
    
  2. Dao层实现类

    public class UserDaoImpl implements UserDao{
        public void getUser() {
            System.out.println("获取用户,此方法为:Dao层方法");
        }
    }
    
  3. Service层接口

    public interface UserService {
        void getUser();
    }
    
  4. Service层实现类

    public class UserServiceImpl implements UserService{
        private UserDao userDao = new UserDaoImpl();
    
        public void getUser() {
            userDao.getUser();
        }
    }
    

在service的实现类中引入Dao,在由Dao在service中调用相应的方法。

现在我们增加一个需求:增加其他的实现。

具体实现步骤:

  1. 新增Dao层实现类
  2. 在service中引入Dao层,并调用相应的方法

eg:

  1. 新增Dao层实现类

    public class UserDaoMysqlImpl implements UserDao{
        public void getUser() {
            System.out.println("获取用户,此方法为:UserDaoMysqlImpl中的方法");
        }
    }
    
  2. 在service中引入Dao层,并调用相应的方法

    这时候就会发生一个问题,如果用户想要访问到新增加的这个Dao层的东西,就必须修改Service层中实现类中的代码,将新的Dao层实现类对象引入到Service层中。

    即:

    private UserDao userDao = new UserDaoImpl();
    //将下述代码替换上述代码
    private UserDao userDao = new UserDaoMysqlImpl();
    

    用户每次调用一个新的业务都需要修改Service层中的代码,显然这样在显示的业务中是不可取的。那么如何解决这类问题呢?

可以使用set方法实现动态的改变Service实现类中Dao的改变。

private UserDao userDao;

public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
}

向上述这样。这样的话用户就可以根据自己的需求动态的进行改变。

eg:

    @Test
    public void test(){
        UserService userService = new UserServiceImpl();
        UserDaoImpl userDao = new UserDaoImpl();
        UserDaoMysqlImpl userDaoMysql = new UserDaoMysqlImpl();
        ((UserServiceImpl) userService).setUserDao(userDaoMysql);//这里用户可以根据自己的需求动态的对Dao层进行注入。
        userService.getUser();
    }

总结:

  • 之前,程序是主动进行创建的,控制权程序猿手中。
  • 使用set方法以后,程序失去了主动性变成了被动的接受对象!!!!
  • 这种思想从本质上解决了问题,我们作为开发人员不需要在去管理对象的创建了。这样大大降低了系统的耦合性,可以更加专注与业务的实现。这就是IOC的原型!!!!!

本质

​ 控制反转IOC(Inversion Of Control),是一种设计思想,DI(依赖注入)是实现IOC的一种方法,也有一种说法是DI是IOC的另一种说法。在没有IOC的程序中对象的创建完全硬解码在程序中(写死在程序中),对象的创建由程序自己控制,使用了控制反转以后将对象的创建转移给第三方,所以个人认为所谓控制反转就是获取对象的方式发生了反转。

用图形表示如下:

IOC是Spring框架的核心,可以使用多种方式完美的实现IOC,eg:XML配置文件,注解,甚至可以零配置实现IOC

标签:SpringIOC,userDao,Service,推导,理论,Dao,UserDao,IOC,public
From: https://www.cnblogs.com/fan129/p/17347157.html

相关文章

  • 华为1+X证书理论
    • 43(单选题)VLANIF接口通过数据帧的哪个信息判断进行二层转发或者三层转发?• A、目的MAC• B、源IP• C、目的端口• D、源MAC正确答案A• 44(单选题)管理员发现无法通过TFTP传输文件到华为AR200路由器,则可能的原因是什么?• A、TFTP服务器的TCP69号端口被禁用• B、TFTP服务......
  • #yyds干货盘点#列表推导式
    列表推导式创建列表的方式更简洁。常见的用法为,对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表;或用满足特定条件的元素创建子序列。例如,创建平方值的列表:>>>squares=[]>>>forxinrange(10):...squares.append(x**2)...>>>squares[0,1,4,......
  • 克里金(Kriging)插值的原理与公式推导
    这篇文章是转载的一个大神的,因为那个大神的知乎回答的公式坏了,因此整理了一下公式,分享一下,讲的真的挺好的,大神的博客链接:克里金(Kriging)插值的原理与公式推导-xg19900.引言——从反距离插值(IDW)说起空间插值问题,就是在已知空间上若干离散点\(\left(x_i,y_i\right)\)的某......
  • Qos初体验和基本理论(1)
    目录Qos初体验和基本理论基础环境目标及思路配置步骤未配置Qos之前的报文步骤配置QOS之后分析大体工作流程几个问题概念QOSDiffServ与DSCP再探DiffServDiffServ工作原理分类行为PHBPHB与加速classselector类选择器映射serviceclass和color参考Qos初体验和基本理论当我们了解一个......
  • SDN&VXLAN理论部分
    目录SDN传统网络SDNOpenFlow南向和北向华为SDN方案虚拟化NFV超融合VXLAN传统Fabric网络架构新型Overlay网络结构VXLANSDN传统网络在传统网络当中,管理员通过管理平面的一些协议,不管是http、ssh、telnet连接到控制平面当中做一些配置,比如说配置OSPF,然后OSPF进程会生成路由表,形成FIB表......
  • 类型推导
    decltype类型推导,推导的比较“原生态”。auto和模板类型推导针对const关键字是一样的,都是忽略顶层const,(推导)保留底层const.模板类型T,这个T可以被推到为指针型,或者引用型(引用折叠)。一般模板类引用的话(T&)要写成(constT&),因为T&只能接收左值,而constT&则接收任意类型。......
  • RNN网络的数学理论公式以及torch案例代码
    RNN网络的数学理论公式以及torch案例代码公式记号数学理论公式torch实现代码RNN(循环神经网络)是一种深度学习模型,可用于序列数据建模,例如语言模型或时间序列预测。以下是RNN的数学理论公式和torch实现示例。公式记号需要注意的是,在训练循环中,我们不需要显式地传......
  • 5.数据交换格式与 SpringIOC 底层实现
    数据交换格式与SpringIOC底层实现一、课程目标XML和JSONJava反射机制手写SpringIOC二、什么是数据交换格式客户端与服务器常用数据交换格式xml、json、html三、数据交换格式用场景移动端(安卓、IOS)通讯方式采用http协议+JSON格式走restful风格。很多互......
  • 华为1+X理论及解析
    C2.UDP是面向无连接的,必须依靠(C)来保障传输的可靠性.A网络层协议B传输控制协议C.应用层协议D.网际协议B.传输控制协议(TCP)通常用于保障UDP传输的可靠性。UDP是面向无连接的协议,不提供数据包的确认和重传机制,因此在需要可靠性的场景下,应该使用TCP或者一些应用层协议来保......
  • MATLAB代码:基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法
    MATLAB代码:基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法关键词:合作博弈纳什谈判风–光–氢系统综合能源 参考文档:《基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法》基本复现仿真平台:MATLAB平台优势:代码具有一定的深度和创新性,注释清晰,非烂大街的......