首页 > 其他分享 >Ioc控制反转

Ioc控制反转

时间:2023-07-12 20:47:06浏览次数:25  
标签:控制 反转 ctx BookDao bookDao import Ioc public

Ioc(Inversion of control)控制反转

  • 使用对象时,由主动new产生对象转化为外部提供对象,此过程对象控制权由对象转移到外部,此思想称为控制反转。

spring技术对Ioc思想进行了实现

  • spring提供了一个容器称为Ioc容器,用来充当Ioc思想的“外部
  • Ioc容器负责对象的创建,初始化等一系列工作,被创建或者被管理的对象在Ioc容器中统称为Bean

DI(Dependency Injection)依赖注入

  • 在容器中建立Bean与Bean之间的依赖关系的整个过程,被称为依赖注入

Ioc入门案例

pom.xml
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.itheima</groupId>
  <artifactId>spring_01_quickstart</artifactId>
  <version>1.0-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>


applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
    <!--1.导入spring的坐标spring-context,对应版本是5.2.10.RELEASE-->

    <!--2.配置bean-->
    <!--bean标签标示配置bean
    id属性标示给bean起名字
    class属性表示给bean定义类型-->
    <bean id="bookDao" class="dang.dao.impl.BookDaoImpl"/>
    <bean id="bookService" class="dang.service.BookServiceImpl"/>
    <!--7.配置server与dao的关系-->
    <!--property标签表示配置当前bean的属性
    name属性表示配置哪一个具体的属性
    ref属性表示参照哪一个bean-->

</beans>

app.java
package dang;

import dang.dao.impl.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class app {
    public static void main(String[] args) {
//3.获取Ioc容器
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
//        4.获取bean(根据bean配置id获取)
        BookDao bookDao=(BookDao)ctx.getBean("bookDao");
        bookDao.save();


//        BookService bookService = (BookService) ctx.getBean("bookService");
//        bookService.save();
    }
}


BookServiceImpl.java
package dang;

import dang.dao.impl.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class app {
    public static void main(String[] args) {
//3.获取Ioc容器
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
//        4.获取bean(根据bean配置id获取)
        BookDao bookDao=(BookDao)ctx.getBean("bookDao");
        bookDao.save();


//        BookService bookService = (BookService) ctx.getBean("bookService");
//        bookService.save();
    }
}

------------

<details>
<summary>BookDaoImpl.java</summary>

package dang.dao.impl;

public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("Book dao save...");
}
}

</details>

标签:控制,反转,ctx,BookDao,bookDao,import,Ioc,public
From: https://www.cnblogs.com/cpdd-dc/p/17548772.html

相关文章

  • ACL(访问控制列表)、SNAT、DNAT
    目录一、ACL新建配置测试二、SNAT新建配置测试三、DNAT新建配置测试四、NATPT(端口映射)新建配置测试五、Easy-IP新建配置测试一、ACL新建配置测试二、SNAT新建配置测试三、DNAT新建配置测试四、NATPT(端口映射)新建配置测试五、Easy-IP新建配置测......
  • scanner对象及控制流
    scanner对象新建scanner对象:Scannerscanner=newScanner(System.in);使用next()方法接收输入:Stringstr=scanner.next();使用nextLine()方法接收输入:Stringstr=scanner.nextLine();判断是否还有输入:scanner.hasNext()scanner.hasNextLine()next():1、一定要读取......
  • 通过自定义指令控制按钮权限
    目录常见写法自定义指令小试牛刀常见写法通常控制按钮显示与否,会采用v-if或者v-show来控制,可能会写成以下形式,在通过动态的改变active变量的值,控制按钮的显示状态,<template><div><buttonv-if="(active='1')">按钮一</button><buttonv-else-if="(active='......
  • m基于强化学习的永磁同步电机位置控制器simulink仿真,对比传统的PI控制器和模糊PI控制
    1.算法仿真效果MATLAB2017b仿真结果如下:      2.算法涉及理论知识概要       永磁同步电机(PermanentMagnetSynchronousMotor,PMSM)是一种高效、精度高、响应速度快的电机,广泛应用于现代工业和民用领域。PMSM的位置控制是PMSM控制的核心问题之一,其优化控......
  • m基于RBF和模糊控制的smith控制器simulink仿真
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要        Smith控制器是一种广泛应用于工业控制和自动化领域的经典控制算法。它通过引入一个延迟时间来补偿系统的时间滞后效应,从而提高系统的稳定性和控制性能。然而,传统的Smith控制器往往依赖于系统......
  • Element-动态控制el-table的行的显示与隐藏
    <el-tableborderstripe:data="form.serialDateList"style="width:100%":row-class-name="rowClassName">//rowClassName<el-table-columntype="index"width="60"align="center"label=&......
  • 反转链表
    给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转换过程如下图所示:......
  • kubernetes之 Pod控制器
    第五部分Pod控制器1、pod回顾apiVersion,kind,metadata,spec,status(只读)spec:containersnodeSelectornodeNamerestartPolicy:Always,Never,OnFailurecontainers:nameimageimagePullPolicy:Always、Never、IfNotPresentports:......
  • JQuery 控制 Div 显示和隐藏
    页面上有两个Div用JQuery控制Div显示和隐藏。实现Div间切换的需求<divclass="IndConKHuansoverH"id="divExtTelList">11111111111111111111<div><divclass="IndConBflex"id="divExtTelStatus">22222222222222......
  • RocketMQ版控制台,在左侧
    打开IntelliJIDEA,创建一个Java工程。在pom.xml文件中添加以下依赖引入JavaSDK的依赖库。 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client-java</artifactId><version>5.0.4</version></depend......