spring 容器结构/机制debug分析--Spring 学习的核心内容和几个重要概念--IOC 的开发模式

news2024/11/25 18:40:38

目录

Spring

Spring 学习的核心内容

解读上图:

Spring 几个重要概念

● 传统的开发模式

解读上图

● IOC 的开发模式

解读上图

代码示例—入门

xml代码

注意事项和细节

1、说明

2、解释一下类加载路径

3、debug 看看 spring 容器结构/机制


Spring

Spring 学习的核心内容

解读上图:

1、Spring 核心学习内容 IOC、AOP, jdbcTemplate, 声明式事务

2、IOC: 控制反转 , 可以管理 java 对象

3. AOP : 切面编程

4. JDBCTemplate : 是 spring 提供一套访问数据库的技术, 应用性强,相对好理解

5. 声明式事务: 基于 ioc/aop 实现事务管理, 理解需要花时间

6. IOC, AOP 是重点同时难点

Spring 几个重要概念

1. Spring 可以整合其他的框架(解读: Spring 是管理框架的框架)

2. Spring 有两个核心的概念: IOC 和 AOP

3. IOC [Inversion Of Control 反转控制]

● 传统的开发模式

[JdbcUtils / 反射]程序------>环境 //程序读取环境配置,然后自己创建对象

解读上图

(以连接到数据库为例说明)

1、程序员编写程序, 在程序中读取配置信息

2. 创建对象, new Object???() // 反射方式

3. 使用对象完成任务

● IOC 的开发模式

程序<-----容器 //容器创建好对象,程序直接使用.

解读上图

1、Spring 根据配置文件 xml/注解, 创建对象, 并放入到容器(ConcurrentHashMap)中,并且可以完成对象之间的依赖

2、当需要使用某个对象实例的时候, 就直接从容器中获取即可

3、程序员可以更加关注如何使用对象完成相应的业务, (以前是 new ... ==> 注解/配置方式)

4. DI—Dependency Injection 依赖注入,可以理解成是 IOC 的另外叫法.

5. Spring 最大的价值,通过配置,给程序提供需要使用的

web 层[Servlet(Action/Controller)]/Service/Dao/[JavaBean/entity]对象,这个是核心价值所在,也是 ioc 的具体体现, 实现解耦

代码示例—入门

通过 Spring 的方式[配置文件],获取 JavaBean: Monster 的对象,并给该的对象属性赋 值,输出该对象信息.

查看容器注入了哪些 bean 对象,会输出 bean 的id

1. 创建容器 ApplicationContext

2. 该容器和容器配置文件关联

3. 通过getBean获取对应的对象   默认返回的是Object , 但是运行类型Monster 

4. 输出

5. 也可以再获取的时候,直接指定Class类型, 可以在次获取 

6. 查看容器注入了哪些bean对象,会输出bean的id

public void getMonster() {

        //解读
        //1. 创建容器 ApplicationContext
        //2. 该容器和容器配置文件关联
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("beans.xml");

        //3. 通过getBean获取对应的对象
        //   默认返回的是Object , 但是运行类型Monster
        //Object monster01 = ioc.getBean("monster01");
        Monster monster01 = (Monster) ioc.getBean("monster01");

        //4. 输出
        System.out.println("monster01=" + monster01 + " 运行类型=" + monster01.getClass());
        System.out.println("monster01=" + monster01 + "属性name=" + monster01.getName() +
                " monserid=" + monster01.getMonsterId());


        //5. 也可以再获取的时候,直接指定Class类型, 可以在次获取
        Monster monster011 = ioc.getBean("monster01", Monster.class);
        System.out.println("monster011=" + monster011);
        System.out.println("monster011.name=" + monster011.getName());


        //6. 查看容器注入了哪些bean对象,会输出bean的id
        System.out.println("================================");
        String[] beanDefinitionNames = ioc.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println("beanDefinitionName=" + beanDefinitionName);
        }
        System.out.println("================================");

        System.out.println("ok~~~");
    }

xml代码

        1. 配置monster对象/javabean
        2. 在beans中可以配置多个bean
        3. bean表示就是一个java对象
        4. class属性是用于指定类的全路径->spring底层使用反射创建
        5. id属性表示该java对象在spring容器中的id, 通过id可以获取到对象
        6. <property name="monsterId" value="100"> 用于给该对象的属性赋值
 

<!--
    -->
    <bean class="com.spring.bean.Monster" id="monster01">
        <property name="monsterId" value="100"/>
        <property name="name" value="牛魔王"/>
        <property name="skill" value="芭蕉扇"/>
    </bean>

注意事项和细节

1、说明

ClassPathXmlApplicationContext ioc =

                                                        new ClassPathXmlApplicationContext("beans.xml");

为什么读取到 beans.xml

2、解释一下类加载路径

获取类加载的路径

File f = new File(this.getClass().getResource("/").getPath());

                        System.out.println(f);

3、debug 看看 spring 容器结构/机制

 

 

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

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

相关文章

ChatGPT学习研究总结

目录 ChatGPT研究总结 一、程序接入用途不大 二、思考&#xff1a;如何构建一个类似ChatGPT的自定义模型 一些ChatGPT研究学习资料&#xff08;来源网络&#xff09; &#xff08;1&#xff09;一文读懂ChatGPT模型原理 &#xff08;2&#xff09;MATLAB科研图像处理——…

Windows更新【bug】

Windows更新【bug】 前言推荐Windows更新问题解决 最后 前言 以下内容源自【bug】 仅供学习交流使用 推荐 Win11安全更新问题 仍为解决 Windows更新 问题 完成更新以维护设备安全性 你的设备缺少重要的安全更新。请确保设备保持打开状态并接通电源&#xff0c;以便更新可…

评价基于GPT和Bert的方法并用于生信文本识别PPI

检测蛋白质-蛋白质相互作用&#xff08;PPI&#xff09;对于理解遗传机制、疾病发病机制和药物设计至关重要。然而&#xff0c;随着生物医学文献的快速增长&#xff0c;越来越需要自动和准确地提取PPI以促进科学知识发现。预训练语言模型&#xff0c;例如生成式预训练Transform…

学历:门槛还是机会?

目录 一、学历和职业之间的关系认知 二、不同的文化和传统也会对学历带来不同的解读 三、在学习、生活及工作中学历带来的局限性 四、造成“孔乙己长衫”现象的深层次原因 五、给与学弟学妹们一点毕业就业的建议 是否应该追求高学历一直是社会上热议的话题。有人认为学历代…

Splunk 转移数据之collect 命令

1: 背景: 有些数据的输出结果需要很长时间,原因是查询的数据量很大,还有就是搜索的时间范围很大:一年,或者要统计过去几个月的count / 或者是比例等。 那么在这种背景下,就需要转移查询的数据结构,进行转移到另外一个index, 用另外一个新的index 进行实时展示。 下面…

【一起撸的DL框架】5 实现:自适应线性单元

CSDN个人主页&#xff1a;清风莫追欢迎关注本专栏&#xff1a;《一起撸个DL框架》GitHub获取源码&#xff1a;https://github.com/flying-forever/OurDL 文章目录 5 实现&#xff1a;自适应线性单元&#x1f347;1 简介2 损失函数2.1 梯度下降法2.2 补充 3 整理项目结构4 损失函…

glibc 系统C文件库

下载时候经常会需要选择glibc glibc是GNU发布的libc库&#xff0c;即c运行库。 glibc是linux系统中最底层的api&#xff0c;几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外&#xff0c;它本身也提供了许多其它一些必要功能服务的实现。 li…

tcpdump使用教程

一、概述 tcpdump是一个功能强大的&#xff0c;用于抓取网络数据包的命令行工具&#xff0c;与带界面的Wireshark一样&#xff0c;基于libpcap库构建。这篇文章主要介绍tcpdump的使用。关于如何使用tcpdump的资料中&#xff0c;最有用的就是tcpdump的两个手册。 tcpdump使用手…

CANOE入门到精通——CANOE系列教程记录2

本系列以初学者角度记录学习CANOE&#xff0c;以《CANoe开发从入门到精通》参考学习&#xff0c;CANoe16 demo版就可以进行学习 创建工程 在一个路径中&#xff0c;创建这几个文件夹 创建工程&#xff0c;将工程命名Vehicle_System_CAN.cfg 创建Database dbc文件 在实际开…

SignOff Criteria——OCV applied and results

文章目录 1. O v e r v i e w Overview Overview1.1 w h a t i s o c v what\ is\ ocv what is ocv&#xff1f;1.2 O C V . E f f e c t o n s i g n o f f OCV.\ Effect\ on\ signoff OCV. Effect on signoff1.3 H o w t o r e m o v e t h e e f f e c t s o f O C V Ho…

【hello Linux】可重入函数、volatile和SIGCHLD信号

目录 1. 可重入函数 2. volatile 3. SIGCHLD信号 Linux&#xff01;&#x1f337; 1. 可重入函数 先来谈一下重入函数的概念&#xff1a;重入函数便是在该函数还没有执行完毕便重复进入该函数&#xff08;一般发生在多线程中&#xff09;&#xff1b; 可重入函数&#xff1a…

C++程序设计——lambda表达式

一、问题引入 在C98中&#xff0c;如果想对一个数据集合中的元素进行排序&#xff0c;可以使用sort()方法&#xff0c;但如果待排序元素为自定义类型&#xff0c;就需要用户自己定义排序时的比较规则。 随着C语法的发展&#xff0c;人们开始觉得其编写比较复杂&#xff0c;每次…

Word2vec原理+实战学习笔记(一)

来源&#xff1a;投稿 作者&#xff1a;阿克西 编辑&#xff1a;学姐 视频链接&#xff1a;https://ai.deepshare.net/detail/p_5ee62f90022ee_zFpnlHXA/6 文章标题&#xff1a; Efficient Estimation of Word Representations in Vector Space 基于向量空间中词表示的有效估计…

【计算机网络】学习笔记:第四章 网络层(七千字详细配图)【王道考研】

基于本人观看学习b站王道计算机网络课程所做的笔记&#xff0c;不做任何获利 仅进行交流分享 特此鸣谢王道考研 若有侵权请联系&#xff0c;立删 如果本篇笔记帮助到了你&#xff0c;还请点赞 关注 支持一下 ♡>&#x16966;<)!! 主页专栏有更多&#xff0c;如有疑问欢迎…

安装chatglm

地址 下载源代码 下载完成后解压 安装cuda 输入nvcc -V查看是否安装cuda 输入nvidia-smi查看支持的最高版本&#xff0c;最高支持12.1 下载cudahttps://developer.nvidia.com/cuda-downloads 双击安装 同意之后点击下一步 选择精简模式即可 等待下载安装包 …

链接sqlite

一.sqlite库函数 1.sqlite3_open()函数 语法&#xff1a;*sqlite3_open(const char *filename, sqlite3 *ppDb) 作用&#xff1a;该例程打开一个指向 SQLite 数据库文件的连接&#xff0c;返回一个用于其他 SQLite 程序的数据库连接对象。 参数1&#xff1a;如果 filename …

如何在自己的Maven工程上搭建Mybatis框架?

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 Maven版本&#xff1a;apache-maven-3.6.3 Mybatis版本&#xff1a;3.5.6 目录 前言 一. 什么是Mybatis框架&#xff1f;1.1 框架是什么&#xff1f;1.2 什么是MyBatis &#xff1f;1…

3.11 C结构体及结构体数组

结构体的意义 问题&#xff1a;学籍管理需要每个学生的下列数据&#xff1a;学号、姓名、性别、年龄、分数&#xff0c;请用C语言程序存储并处理一组学生的学籍。 思考&#xff1a;如果有多个学生&#xff0c;该怎么定义 已学数据类型无法解决。 结构体概述 正式&#xff1a;…

【Sping学习详解】

重新学习Spring很久了&#xff0c;也看了不少的视频&#xff0c;但是没有系统总结&#xff0c;容易忘记&#xff0c;网上寻找相关博客&#xff0c;也没有找到按照路线总结的&#xff0c;只能说不顺我心&#xff0c;所以自己总结一下&#xff01;&#xff01;&#xff01; 从下…

vulnhub靶机dpwwn1

准备工作 下载连接&#xff1a;https://download.vulnhub.com/dpwwn/dpwwn-01.zip 网络环境&#xff1a;DHCP、NAT 下载完后解压&#xff0c;然后用VMware打开dpwwn-01.vmx文件即可导入虚拟机 信息收集 主机发现 端口发现 继续查看端口服务信息 打开网站发现只有Apache默认…