返回顶部
首页 > 资讯 > 后端开发 > Python >浅谈Spring中IOC的理解和认知
  • 408
分享到

浅谈Spring中IOC的理解和认知

2024-04-02 19:04:59 408人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

ioc的推导 1.1、模拟一个正常查询信息的业务流程: ①mapper层:因为没有连接数据库,这里我们写一个mapper的实现类来模拟数据的查询 public interface

ioc的推导

1.1、模拟一个正常查询信息的业务流程:

①mapper层:因为没有连接数据库,这里我们写一个mapper的实现类来模拟数据的查询


public interface PerMapper {
    void getPerInfo();
}

public class StudentMapperImpl implements PerMapper {

    @Override
    public void getPerInfo() {
        System.out.println("我是一个学生");
    }
}

②service层:service的作用是查询人的信息


public interface PersonService {
    void getPersonInfo();
}

public class PersonServiceImpl implements PersonService {

    private PerMapper studentMapper = new StudentMapperImpl();

    @Override
    public void getPersonInfo() {
        studentMapper.getPerInfo();
    }
}

③contorller层


import service.PersonService;
import service.impl.PersonServiceImpl;

public class ioCTest {
    public static void main(String[] args) {
        PersonService service = new PersonServiceImpl();
        service.getStudentInfo();
    }
}

④执行结果如下:

1.2、多个种类的查询

①mapper,增加老师实现类


public class TeacherMapperImpl implements PerMapper {

    @Override
    public void getPerInfo() {
        System.out.println("我是一个老师");
    }
}

②这时候我们同时查询教师和学生的信息该怎么做呢?


public class PersonServiceImpl implements PersonService {

    private PerMapper student = new StudentMapperImpl();
    private PerMapper teacher = new TeacherMapperImpl();

    @Override
    public void getPersonInfo() {
        student.getPerInfo();
        teacher.getPerInfo();
    }
}

③执行结果:

④如果需求再次变更呢?只需要教师的信息怎么做呢?
毋庸置疑:两种做法,
一种是直接更改PersonServiceImpl的getPersonInfo()


   @Override
    public void getPersonInfo() {
//        student.getPerInfo();
        teacher.getPerInfo();
    }

第二种是扩展service层的接口,把老师和学生分别提供接口来查询:


public interface PersonService {
    void getPersonInfo();
    void getPersonInfo1();
}

    public class PersonServiceImpl implements PersonService {

    private PerMapper student = new StudentMapperImpl();
    private PerMapper teacher = new TeacherMapperImpl();

    @Override
    public void getPersonInfo() {
        teacher.getPerInfo();
    }

    @Override
    public void getPersonInfo1() {
        student.getPerInfo();
    }
}

⑤看起来好像没啥问题是吧?那假如有一百种人呢?需要改来改去人都会疯掉的。这种做法肯定不合理的!

1.3、优化查询方式

①聪明的孩子可以想到将查询的对象剥离出来:添加 set() 方法,对接口不实现,只进行预留的工作。


public class PersonServiceImpl implements PersonService {

    private PerMapper per;

    public void setPer(PerMapper per) {
        this.per = per;
    }

    @Override
    public void getPersonInfo() {
        per.getPerInfo();
    }

}

②controller层实现方式:


public class IOCTest {
    public static void main(String[] args) {
        PersonServiceImpl service = new PersonServiceImpl();
        //学生
        service.setPer(new StudentMapperImpl());
        service.getPersonInfo();
        //老师
        service.setPer(new TeacherMapperImpl());
        service.getPersonInfo();
    }
}

总结:这种方式就是把主动权交给了调用者 ,程序不用去管怎么创建,怎么实现了 .,它只负责提供一个接口 。

我们不再去管理对象的创建了 , 更多的去关注业务的实现 ,耦合性大大降低 ,这也就是IOC的原型 !

1.4、IOC本质

控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在spring中实现控制反转的是IOC容器,其实现方法是依赖注入(Dependency Injection,DI)。

以上就是关于Spring之IOC的理解和认知的详细内容,更多关于Spring之IOC的理解的资料请关注编程网其它相关文章!

--结束END--

本文标题: 浅谈Spring中IOC的理解和认知

本文链接: https://lsjlt.com/news/123124.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 浅谈Spring中IOC的理解和认知
    IOC的推导 1.1、模拟一个正常查询信息的业务流程: ①mapper层:因为没有连接数据库,这里我们写一个mapper的实现类来模拟数据的查询 public interface...
    99+
    2024-04-02
  • 浅谈spring aop的五种通知类型
    spring aop通知(advice)分成五类: 前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。 正常返回通知[After returning advice]...
    99+
    2023-05-30
    spring aop 通知
  • 浅谈Spring 中 @EnableXXX 注解的套路
    目录前言设计目标@EnableScheduling (导入一个 @Configuration 类)@EnableTransactionManagement(导入一个 ImportSe...
    99+
    2024-04-02
  • 浅谈Spring AOP中args()和argNames的含义
    args()的作用主要有两点: 1、切入点表达式部分如果增加了args()部分,那么目标方法除了要满足execution部分,还要满足args()对方法参数的要求,对于符合execu...
    99+
    2024-04-02
  • 浅谈一下Spring中的createBean
    目录找到BeanClass并且加载类实例化前实例化Supplier创建对象工厂方法创建对象推断构造方法BeanDefionition 的后置处理实例化后属性填充Aware回调初始化前...
    99+
    2024-04-02
  • 如何理解spring框架中的ioc
    这期内容当中小编将会给大家带来有关如何理解spring框架中的ioc,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。摘要: 关于spring框架中的ioc的幽默解释 IoC就是Inversion of Co...
    99+
    2023-06-17
  • 浅谈对Python变量的一些认识理解
    一、Python变量 在大多数语言中,为一个值起一个名字时,把这种行为称为“给变量赋值”或“把值存储在变量中”。不过,Python与许多其它计算机语言的有所不同,它并不是把值存储在变...
    99+
    2024-04-02
  • 浅谈Spring框架中@Autowired和@Resource的区别
    目录前言默认注入方式不同提供者不同补充:@Resource的装配顺序如下总结前言 写过Spring框架的同学应该都知道,Spring当中使用字段注入的时候既可以用 @Autowire...
    99+
    2022-11-13
    @autowired和@resource区别 spring @autowired @resource
  • spring中ioc和aop的原理是什么
    Spring中的IOC(控制反转)和AOP(面向切面编程)是两个核心概念,它们的原理分别如下: 1、IOC(控制反转)的原理:IOC...
    99+
    2024-04-02
  • 浅谈spring和spring MVC的区别与关系
    spring是一个开源框架,功能主要是依赖注入和控制反转。依赖注入有三种形式1、构造注入(bytype)2、setter注入3、接口注入(byname) 而控制反转则主要是起到操控作用,把对象的创建,初始化,销毁交给spring容器来处理。...
    99+
    2023-05-31
    spring springmvc sprin
  • Spring(一):IOC如何推导和理解
    目录IOC的推导1.1、模拟一个正常查询信息的业务流程:1.2、多个种类的查询1.3、优化查询方式1.4、IOC本质IOC的推导 1.1、模拟一个正常查询信息的业务流程: ①mapp...
    99+
    2024-04-02
  • 浅谈django中的认证与登录
    认证登录 django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1 authenticate(**credentials) 提供了用户认证,即验证用户名以及密码是否正确 ...
    99+
    2022-06-04
    浅谈 django
  • 浅谈spring中的default-lazy-init参数和lazy-init
    在spring的配置中的根节点上有个  default-lazy-init="true"配置:1、spring的default-lazy-init参数 此参数表示延时加载,即在项目启动时不会实例化注解的bean,除非启动项目时需要...
    99+
    2023-05-31
    spring default-lazy-init 参数
  • Hadoop-谈谈你对Hadoop的正确认识和理解
    一.什么是hadoop? Hadoop是Apache旗下的一套开源软件平台,是用来分析和处理大数据的软件平台。 Hadoop提供的功能:利用服务器集群,根据用户的自定义业务逻辑, 对海量数据进行分布式处理。3.Hadoop的核心组...
    99+
    2019-02-27
    Hadoop-谈谈你对Hadoop的正确认识和理解
  • 索引——谈谈你对索引的认识和理解
    为什么要用索引? 一般的应用系统,读写比例在10:1左右,插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得...
    99+
    2020-08-25
    索引——谈谈你对索引的认识和理解
  • 浅析Spring IOC 依赖查找你需要知道的几种方式
    目录1. 根据 Bean 名称查找实时查找延时查找2. 根据 Bean 类型查找单个 Bean 对象集合 Bean 对象3. 根据 Bean 类型 + 名称查找首先,我们创建一个包含...
    99+
    2024-04-02
  • 浅谈ASP.NET Core 中jwt授权认证的流程原理
    1,快速实现授权验证 什么是 JWT ?为什么要用 JWT ?JWT 的组成? 这些百度可以直接找到,这里不再赘述。 实际上,只需要知道 JWT 认证模式是使用一段 Token...
    99+
    2022-06-07
    ASP.NET net jwt core ASP
  • 浅谈Java注解和动态代理
    本文主要介绍Java中与注解和动态代理有关的部分知识,接下来我们看看具体内容。Annotation(注解)其实就是代码里的特殊标记, 它用于替代配置文件,也就是说,传统方式通过配置文件告诉类如何运行,有了注解技术后,开发人员可以通过注解告诉...
    99+
    2023-05-31
    java 注解 动态代理
  • Spring中IOC和AOP的示例分析
    小编给大家分享一下Spring中IOC和AOP的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring是一个开源框架,主要实现两件事,IOC(控制反转...
    99+
    2023-05-30
    spring ioc aop
  • spring中IoC和DI的示例分析
    这篇文章主要介绍spring中IoC和DI的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!这里先来简单介绍下IoC和DI的区别:IOC:翻译过来是控制反转,将对象的创建权由Spring管理,HelloServ...
    99+
    2023-05-30
    spring ioc di
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作