IOC和DI入门案例

news2024/10/7 20:31:12

IOC案例

  1. 创建BookDao接口、BookDaoImpl类和BookService接口、BookServiceImpl类

1.BookDao

package dao;

public interface BookDao {
    public void save();
}

2.BookDaoImpl类

package dao;

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

3.BookService接口

package impl;

public interface BookService {
    public void save();
}

4.BookServiceImpl类

package impl;

import dao.BookDao;
import dao.BookDaoImpl;

public class BookServiceImpl implements BookService{
    //5.删除业务层中使用new方式创建的对象
    private BookDao bookDao=new BookDaoImpl();
    public void save(){
        System.out.println("book service save...");
        bookDao.save();
    }
    //6.提供set方法
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}
  1. 添加spring依赖jar包

pom.xml插入一下代码

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
    </dependencies>
  1. 添加配置文件
    resources 下添加 spring 配置文件 applicationContext.xml
    在这里插入图片描述
  2. 在配置文件中文成bean的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--1.导入spring的坐标spring-context 对应的版本是5.2.10.RELEASE-->
    <!--2.配置bean-->
    <!--bean标签表示配置bean   id属性表示给bean起名字    class属性表示的bean定义类型-->

    <bean id="bookDao" class="dao.BookDaoImpl"/>
    <bean id="bookService" class="impl.BookServiceImpl"/>
    

</beans>

bean定义id属性在同一个配置文件中不能重复。

  1. 获取IOC容器
    使用Spring提供的接口完成IOC容器的创建,创建App类,编写main方法
public class App {
    public static void main(String[] args) {
        //获取Ioc容器
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}
  1. 从容器中获取对象进行方法调用
public class App {
   public static void main(String[] args) {
       //获取Ioc容器
       ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
       //4.获取bean
       BookDao bookDao= (BookDao) ctx.getBean("bookDao");
       bookDao.save();

       BookService bookService= (BookService) ctx.getBean("bookService");
       bookService.save();
   }
}
  1. 运行结果
    在这里插入图片描述

DI案例

  1. 在BookServiceImpl类中,删除业务层中使用new的方式创建的dao对象并提供set方法
public class BookServiceImpl implements BookService{
    //5.删除业务层中使用new方式创建的对象
    private BookDao bookDao;//=new BookDaoImpl();
    public void save(){
        System.out.println("book service save...");
        bookDao.save();
    }
    //6.提供set方法
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}
  1. 修改配置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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--1.导入spring的坐标spring-context 对应的版本是5.2.10.RELEASE-->
    <!--2.配置bean-->
    <!--bean标签表示配置bean   id属性表示给bean起名字    class属性表示的bean定义类型-->

    <bean id="bookDao" class="dao.BookDaoImpl"/>
    <bean id="bookService" class="impl.BookServiceImpl">
            <!-- 7.配置server与dao的关系-->
            <!--    property 标签表示配置当前bean属性-->
            <!--    name属性表示配置哪一个具体的属性-->
            <!--    ref属性表示参照哪一个bean-->
    <property name="bookDao" ref="bookDao" />
    </bean>

</beans>

配置中的两个bookDao的含义不一样

  • name="bookDao"中的bookDao的作用是让Spring的IOC容器在获取到名称后,将首字母大写,前面加set找对应的setBookDao()方法进行对象注入。
  • ref="bookDao"中的bookDao的作用是让Spring能在IOC容器中找到id为bookDao的Bean对象给bookService进行注入。
    在这里插入图片描述
  1. 运行结果
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Invisible Backdoor Attack with Sample-Specific Triggers 论文笔记

1. 论文信息 论文名称Invisible Backdoor Attack with Sample-Specific Triggers作者Yuezun Li&#xff08;香港大学&#xff09;出版社ICCV 2021pdf在线pdf 本地pdf代码TensorFlow简介提出了 sample-specific 以及 invisible 的 trigger。使用数字水印技术生成看不见的后门 …

MCE | 肿瘤微环境在癌症中的作用

在过去数十年中&#xff0c;通过使用免疫疗法、靶向疗法和联合方案&#xff0c;癌症治疗领域取得了很大的进步。但这些治疗方案中的绝大多数最终都无法治愈患者&#xff0c;甚至对治疗有显著初始反应的肿瘤也经常复发为耐药恶性肿瘤。另一方面&#xff0c;越来越多的证据表明&a…

A-Level经济例题解析及练习Budget Constraint

知识点&#xff1a;Budget Constraint例题 Question: Budget Constraint Hurley’s income: $1200, Prices: PF $4 per fish, PM $1 per mango A. If Hurley spends all his income on fish, how many fish does he buy? B. If Hurley spends all his income on mangos…

Java开发基础_04

六. 集合框架 #mermaid-svg-g9w5yNcJQzio5Xvm {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-g9w5yNcJQzio5Xvm .error-icon{fill:#552222;}#mermaid-svg-g9w5yNcJQzio5Xvm .error-text{fill:#552222;stroke:#55222…

【总结】Idea 编译maven项目报错NoSuchMethodError DefaultModelValidator

从网上git clone了一个项目&#xff0c;本地编译compile、打包package都没问题。 但是启动服务&#xff0c;启动不了&#xff0c;且查看Dependency Analyzer 没有任何依赖信息。执行Reimport时&#xff0c;报错如下。 错误信息 org.codehaus.plexus.component.repository.exc…

Git的简单使用

Git的简单使用一、关于版本控制1、文件的版本2、版本控制软件1.本地版本控制系统2.集中化的版本控制系统3.分布式的版本控制系统二、Git的简介1、什么是Git2、SVN的差异比较3、Git的记录快照4、Git中的三个区域5、使用Git的基本流程三、Git的基本操作1、配置Git1. 配置用户信息…

集合~List

List List集合概述和特点 List集合概述 有序集合&#xff08;也称为序列&#xff09;&#xff0c;用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素&#xff0c;并搜索列表中的元素与Set集合不同&#xff0c;列表通常允许重复的元素 List集合特点 …

【JavaSE】String类总结,StringBuilder、StringBuffer、String的区别讲解

文章目录String对象的构造String类的一些常用方法求字符串的长度字符串判空字符串对象的比较字符串对象的查找字符串对象的转化字符串对象的截取字符串对象的替换字符串对象的拆分字符串对象的大小写转换常用方法总结StringBuilder与StringBuffer字符串为什么不可变String Stin…

Alibaba架构师内部最新发布SpringCloud开发手册,Github限时开源

微服务是SOA之后越来越流行的体系结构模式之一&#xff01; 如果您关注行业趋势&#xff0c;就会发现,如今商业机构不再像几年前那样&#xff0c;开发大型应用程序&#xff0c;来管理端到端之间的业务功能&#xff0c;而是选择快速灵活的微服务。 通过微服务&#xff0c;架构师…

寒气难抵,跨境电商年底仍有一批卖家要出局!

2020年初的新冠疫情仍历历在目&#xff0c;跨境电商在这两年间也是经历了许多不同的波折和困难。从2020年到2022年&#xff0c;由于各国之间出于疫情防控等多方面的考虑&#xff0c;逐渐的增加贸易壁垒&#xff0c;致使跨境电商的物流成本大概增长了50%&#xff0c;物流成本占订…

UE4 回合游戏项目 22- 控制新角色

在上一节&#xff08;UE4 回合游戏项目 21- 添加多种类型的敌人&#xff09;基础上新添加一个玩家角色 效果&#xff1a; 步骤&#xff1a; 1.打开进阶游戏资源&#xff0c;解压“回合迁移_第七节&#xff08;只是新人物包&#xff09;” 2.解压后双击打开工程 3.选中“ziyuan…

免费查题接口系统

免费查题接口系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳…

微信小程序 | 小程序开发

&#x1f5a5;️ 微信小程序专栏&#xff1a;小程序开发 初级知识 &#x1f9d1;‍&#x1f4bc; 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; ✨ 个人主页&#xff1a;CoderHing的个人主页 &#x1f340; 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ &#x1f…

51单片机学习笔记2 仿真器的使用及STC89Cxx简介

51单片机学习笔记2 仿真器的使用及STC89Cxx简介&#xff09;一、连接步骤1. 硬件连接2. 安装软件驱动3. 检查是否安装成功二、仿真步骤1. 打开一个51工程2. 选择仿真设备3. Settings设置4. Utilities设置5. 点击仿真三、连接开发板四、STC89Cxx单片机简介1. 单片机2. 51单片机3…

红黑树的插入与验证——附图详解

文章目录红黑树性质红黑树的插入前言寻找插入位置情况 1.0情况 1.1情况 1.2情况 1.3情况 2.0情况 2.1情况 2.2情况 2.3完整代码红黑树的检验验证代码和用例红黑树 上篇文章我们说到 AVL 树在新增 / 减少结点的时候会进行旋转以保持 AVL 树的高度平衡, 但是实际上在需要 频繁加…

【构建ML驱动的应用程序】第 2 章 :制定计划

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

【线程】多线程安全

考点&#xff0c;线程同步有哪些操作&#xff1a; 一、概念 如果一个函数能被多个线程同时调用且不发生竞态条件&#xff0c;则成为它是线程安全&#xff0c;也叫可重入函数。通俗地说就是多线程程序无论调度顺序怎么样都可以得到正确的结果&#xff0c;运行时程序不出错。可重…

2023年浙大MBA项目的后备考阶段三大策略:你永远要相信光的力量

有些人&#xff0c;走着走着就掉队了。距离今年的管理类联考还有一个月时间&#xff0c;一切看似终成定局&#xff0c;但实际上仍有很大转圜空间。对浙大MBA的准考生来说&#xff0c;走到目前这一步&#xff0c;剩下的一个月时间务必要坚持走完&#xff0c;而且要更加的勇敢和底…

SDN功能实现(四)--- 实现自定义action(1)修改OVS源码<队列去重(内核态实现)>

实现功能&#xff1a;设计一个新的action&#xff0c;实现在冗余链路中的数据包去重 一&#xff1a;在内核级定义OVS action &#xff08;一&#xff09;在datapath/linux/compat/include/linux/openvswitch.h中添加&#xff1a; enum ovs_action_attr {/* ... *//** after…

SparkStreaming

sparkstreaming 1.批处理与流处理 spark本身作为引擎时是批处理&#xff0c;从信息源全部读取数据&#xff0c;然后一批一批处理数据。处理sparkSQL等之后再存入hdfs。 sparkstreaming是实时引擎&#xff0c;在一个窗口时间内&#xff08;比如1s&#xff09;积攒数据&#x…