Spring之IOC入门案例

news2024/11/16 11:57:47

目录

一:IOC入门案例实现思路分析

1.IOC容器管理什么?

2. 如何将被管理的对象告知 IOC 容器 ?

3.被管理的对象交给 IOC 容器,要想从容器中获取对象,就先得思考如何获取到 IOC 容器 ?

4.IOC 容器得到后,如何从容器中获取 bean?

5.使用 Spring 导入哪些坐标 ?

二:IOC容器入门案例代码实现

代码实现步骤如下:

 2.在pom.xml中 添加 Spring 的依赖 ,添加的依赖如下:

3. 定义Spring管理的类和接口,创建 BookService,BookServiceImpl ,BookDao 和 BookDaoImpl 四个类

4.在resources文件目录下添加 spring 配置文件,完成 bean 的相关属性配置

ps:bean定义时,id属性在同一个上下文中不能重复

5. 使用 Spring 提供的接口完成 IOC 容器的创建

6. 从容器中获取对象进行方法调用


一:IOC入门案例实现思路分析

1.IOC容器管理什么?

           肯定是对应的Bean,也就是原来造对的类,管理之后,将其放到IOC容器中,让其变成Bean,如Service 和 Dao。

2. 如何将被管理的对象告知 IOC 容器 ?

          用配置文件来配置相关属性,来告知IOC容器·

3.被管理的对象交给 IOC 容器,要想从容器中获取对象,就先得思考如何获取到 IOC 容器 ?

            Spring是一种技术,我们现在要用到它相关的东西,必然会通过一个接口让其使用,不然我们将如何操作使用

4.IOC 容器得到后,如何从容器中获取 bean?

             用接口所提供的接口方法

5.使用 Spring 导入哪些坐标 ?

          用别人的东西,就按照别人的要求来做事,需要在 pom.xml 添加对应的依赖

二:IOC容器入门案例代码实现

           目标分析 : 将 BookServiceImpl 和 BookDaoImpl 交给 Spring 管理,并从容器中获取对应的 bean对象进行方法调用

代码实现步骤如下:

1. 创建 Maven 项目,项目结构如下

 
2.在pom.xml中 添加 Spring 的依赖 ,添加的依赖如下:

<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>


3. 定义Spring管理的类和接口,创建 BookService,BookServiceImpl ,BookDao 和 BookDaoImpl 四个类

public interface BookDao {
      public void save ();
}
public class BookDaoImpl implements BookDao {
      public void save () {
            System.out.println ( "book dao save ..." );
      }
}
public interface BookService {
      public void save ();
}
public class BookServiceImpl implements BookService {
     private BookDao bookDao = new BookDaoImpl ();
     public void save () {
          System.out.println ( "book service save ..." );
         bookDao.save ();
   }
}


4.在resources文件目录下添加 spring 配置文件,完成 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" >
     <!--bean 标签标示配置 bean
     id 属性标示给 bean 起名字
     class 属性表示给 bean 定义类型
     -->

      <!--1.导入Spring的坐标spring-context,对应的版本号为5.2.10.RELEASE-->
      <!---2.配置对应的bean->

     <bean id = "bookDao" class ="com.itheima.dao.impl.BookDaoImpl"/>
     <bean id = "bookService" class ="com.itheima.service.impl.BookServiceImpl"/>
</beans>

ps:bean定义时,id属性在同一个上下文中不能重复


5. 使用 Spring 提供的接口完成 IOC 容器的创建

public class App {
     public static void main ( String [] args ) {
           // 获取 IOC 容器
          ApplicationContext ctx = new ClassPathXmlApplicationContext ( "applicationContext.xml" );
      }   
}


6. 从容器中获取对象进行方法调用

public class App {
     public static void main ( String [] args ) {
        //加载配置文件得到上下文对象,也就是容器对象
         // 获取IOC容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext ( "applicationContext.xml" );
              //获取Bean
             // BookDao bookDao = (BookDao)ctx.getBean("bookDao");
            // bookDao.save();
            BookService bookService = ( BookService )ctx .getBean("bookService" );
            bookService.save ();
          }
}

结果:

              问题:虽然IOC容器的入门案例实现了,但代码中还是存在着等于new的代码存在,没有实现充分解耦的效果,那么将如何实现呢,请看下节DI入门案例                                                                                                                                        

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

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

相关文章

C++首超Java

TIOBE 公布了 2022 年 12 月的编程语言排行榜。 TIOBE 将于下个月揭晓其 2022 年度编程语言&#xff0c;目前共有 3 个候选者&#xff1a;Python、C 和 C。TIOBE CEO Paul Jansen 指出&#xff0c;虽然 Python 和 C 已多次斩获该头衔&#xff0c;而 C 仅在 2003 年获得过一次&a…

Android---开发笔记

ListView控件 <ListViewandroid:id"id/main_iv"android:layout_width"match_parent"android:layout_height"match_parent"android:layout_below"id/main_top_layout"android:padding"10dp"android:divider"null&qu…

彩色圣诞树圣诞树

目录 一、圣诞介绍 二、技术需要 三、效果展示 四、实现步骤 五、颜色的更改 六、源码 一、圣诞介绍 基督教纪念耶稣诞生的重要节日。亦称耶稣圣诞节、主降生节&#xff0c;天主教亦称耶稣圣诞瞻礼。耶稣诞生的日期&#xff0c;《圣经》并无记载。公元336年罗马教会开始在…

JavaScript对象与类的创建

1、面向过程与面向对象 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。面向对象是把事务分解成为一个个对象&#xff0c;然后由对象之间分工与合作。 面向过程与面向对象对比 面…

LeetCode11.盛水最多的容器

11. 盛最多水的容器 该题用的是贪心的思想&#xff0c;也即每一步都以更加靠近最值为目标&#xff0c;用双指针维护height数组&#xff0c;接下来我用我自己通俗的语言尽可能解释双指针这种做法的正确性&#xff1a; 首先双指针指向数组两端&#xff0c;从两端开始&#xff0…

必看!Salesforce发布2023年全球科技重要趋势和预测

Salesforce领导者处于影响企业的最新趋势、技术和挑战的前线&#xff0c;通过市场分析、客户对话等方面带来专业知识和洞察力。距离2023年还剩不到一周的时间&#xff0c;未来一年企业应该如何布局&#xff0c;技术会如何发展&#xff0c;值得我们密切关注。 企业需要了解的5项…

IB分数如何影响您的大学申请?

参加 2022 年 11 月 IB 考试的学生将于 1 月 2 日收到IBDP&IBDP相关课程的分数。 大多数在新加坡提供 IB 课程的国际学校都在每年 5 月参加考试。 但是有些学校在 11 月参加 IBDP 考试。其中包括圣约瑟国际学院(SJII)、英华学校(ACS)、澳大利亚国际学校(SAIS)、华中国际学校…

牛客竞赛每日俩题 - 动态规划3

目录 类01背包问题&#xff0c;选or不选 变种走方格 类01背包问题&#xff0c;选or不选 不同的子序列_牛客题霸_牛客网 问题翻译&#xff1a; S有多少个不同的子串与T相同 S[1:m]中的子串与T[1:n]相同的个数 由S的前m个字符组成的子串与T的前n个字符相同的个数 状态&#xf…

SHA3算法笔记

文章目录1 INTRODUCTION2 GLOSSARY3 KECCAK-p Permutations3.1 State3.1.2 Converting Strings to State Arrays3.1.3 Converting State Arrays to Strings3.1.4 Labeling Convention for the State Array3.2 Step Mappingsthetarhopichiiota3.3 KECCAK-p[b, n~r~]3.4 KECCAK-f…

如何使用 Blackbox Exporter 监控 URL?

前言 监控域名和 URL 是可观察性的一个重要方面&#xff0c;主要用于诊断可用性问题。接下来会详细介绍如何使用 Blackbox Exporter 和 Prometheus 在 Kubernetes 中实现 URL 监控。 Blackbox Exporter 简介 Blackbox Exporter 是 Prometheus 的一个可选组件&#xff0c;像其…

离散变量贝叶斯决策简介

贝叶斯决策 最小风险&#xff1a; min⁡R(αi∣x)∑j1cλ(αi∣ωj)P(ωj∣x)\min R\left(\alpha_i \mid \mathrm{x}\right)\sum_{j1}^c \lambda\left(\alpha_i \mid \omega_j\right) P\left(\omega_j \mid \mathrm{x}\right) minR(αi​∣x)j1∑c​λ(αi​∣ωj​)P(ωj​∣x…

django笔记《内置用户认证系统》

文章目录1 前言2 django.contrib.auth3 使用django的用户认证系统3.1 创建一个新的django项目3.2 做数据库迁移3.3 auth_user表结构3.4 创建一个新用户3.5 User对象3.5.1 创建用户 create_user3.5.2 request.user3.5.3 用户在视图函数中登录3.5.4 关键函数3.6 保护视图函数的方…

每日一问-ChapGPT-20221231-关于中医的各国看法

文章目录每日一问-ChapGPT系列起因每日一问-ChapGPT-20221231-关于中医的各国看法各个国家对伤寒论的看法日本对于中医的看法韩国对于中医的看法欧美对于中医的看法中国对于中医的看法当日总结每日一问-ChapGPT系列起因 近来看了新闻&#xff0c;看了各种媒体&#xff0c;抖音…

程序员必须要了解的内存知识——硬件

最近阅读了Ulrich Drepper大牛的论文《What Every Programmer Should Know About Memory》&#xff0c;全文114页&#xff0c;尽管2007年出版&#xff0c;但如今看过来&#xff0c;仍干货满满。接来下对文中提及的知识&#xff0c;结合自己对内存知识的理解&#xff0c;对程序员…

前端面试题汇总-Vue篇

1. Vue的基本原理 当一个Vue实例创建时&#xff0c;Vue会遍历data中的属性&#xff0c;用 Object.defineProperty&#xff08;vue3.0使用proxy &#xff09;将它们转为 getter/setter&#xff0c;并且在内部追踪相关依赖&#xff0c;在属性被访问和修改时通知变化。 每个组件实…

APP专项测试

一、安装/卸载/升级更新 分类测试点安装1. 通过第三方软件协助安装是否正常 2. 在不同的操作系统下安装是否正常 3. 安装过程中断网&#xff0c;安装是否正常 4. 安装后的文件夹以及文件是否写到了指定的目录里 5. 软件安装过程是否可以取消&#xff0c;点击取消后&#xff0c…

Windows 10/11玩游戏时第二显示器延迟怎么办?

现在很多人都会给自己的电脑外接一个显示屏&#xff0c;来提高工作效率&#xff0c;或增强游戏体验&#xff0c;但有时候第二块显示器会出现延迟、卡顿、掉帧等问题。 不过驱动小百科整理了几个缓解Win 10/Win 11上第二显示器延迟的方法&#xff1a; 更改显示器刷新率关闭占用…

阿里云物联网智能视频服务接入

物联网视频服务&#xff08;LinkVisual&#xff09;支持视频流上云、存储、转发、告警事件等视频基础能力&#xff0c;提供丰富的视频算法以及云边协同&#xff08;算法云端训练、云端下发、边缘计算推理&#xff09;服务。旨在帮助视频设备厂商、方案商与服务提供商&#xff0…

Mac退出移动硬盘时显示“磁盘无法推出,因为一个或多个程序正在使用它”解决方案

解决方法1. 重启访达2. 重启电脑3. 终端命令行方法4. df -lh不显示移动磁盘名称时的解决方法1. 重启访达 按住option键&#xff0c;在底部程序坞的访达图标右键&#xff0c;选择重新启动。此时访达app会重启&#xff0c;之后尝试推出即可。 或&#xff1a;点击左上角苹果标&a…

CSDN 2021-2022年微博情感数据分析

微博情感分析是一种用于提取微博文本中的情感倾向的方法。它可以帮助企业了解人们对于某个主题的看法和态度。 如果要进行微博情感分析&#xff0c;需要准备一些微博数据。可以使用爬虫程序爬取相关微博数据&#xff0c;这里使用的 Scrapy 框架进行的数据爬虫。可以使用文本分…