Spring(入门)
- 1. 什么是spring,它能够做什么?
- 2. 什么是控制反转(或依赖注入)
- 3. AOP的关键概念
- 4. 示例
- 4.1 创建工程
- 4.2 pom文件
- 4.3 spring配置文件
- 4.4 示例代码
- 4.4.1 示例1
- 4.4.2 示例2 (abstract,parent示例)
- 4.4.3 使用有参数构造方法创建javaBean
- 4.4.4 init-method:指定bean的初始化方法
- 4.4.5 复杂属性的配置
- 5. 多配置文件
- 6. 与web集成
- 6.1 集成配置
- 6.2 获取配置的Bean
1. 什么是spring,它能够做什么?
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
Spring项目出发点:
- 目的:提供一种贯穿始终的解决方面,将各种专用框架整合成一个连贯的整体框架,简化企业级应用的开发(有点像粘合剂)
- 鼓励最佳实践: 例如spring将“针对接口编程”的成本降到了最小
- 非侵入性: 应用对象尽量避免依赖框架,IoC和AOP是避免依赖的关键技术
- 统一配置: 好的框架应该让应用配置灵活且统一
- 易于测试: 使单元测试尽可能简单
- 可扩展:
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

2. 什么是控制反转(或依赖注入)
控制反转(IoC=Inversion of Control)IoC,用白话来讲,就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
IoC还有一个另外的名字:“依赖注入 (DI=Dependency Injection)” ,即由容器动态的将某种依赖关系注入到组件之中。
3. AOP的关键概念
- 连接点(Joinpoint):程序执行过程中明确的点,如方法的调用,或者异常的抛出.
- 目标(Target):被通知(被代理)的对象
- 通知(Advice):在某个特定的连接点上执行的动作,同时Advice也是程序代码的具体实现,例如一个实现日志记录的代码(通知有些书上也称为处理)
- 代理(Proxy):将通知应用到目标对象后创建的对象(代理=目标+通知),请注意:只有代理对象才有AOP功能,而AOP的代码是写在通知的方法里面的
- 切入点(Pointcut):多个连接点的集合,定义了通知应该应用到那些连接点。(也将Pointcut理解成一个条件 ,此条件决定了容器在什么情况下将通知和目标组合成代理返回给外部程序)
- 适配器(Advisor):适配器=通知(Advice)+切入点(Pointcut)
4. 示例
4.1 创建工程
创建一个web工程,并转换为web3.1, 详细步骤可参见“maven”课件
4.2 pom文件
依赖配置如下:
<properties><hibernate.version>5.2.12.Final</hibernate.version><mysql.driver.version>5.1.44</mysql.driver.version><spring.version>5.2.6.RELEASE</spring.version><struts2.version>2.5.13</struts2.version><slf4j.version>1.7.7</slf4j.version><log4j.version>2.9.1</log4j.version><disruptor.version>3.2.0</disruptor.version><junit.version>4.12</junit.version><servlet.version>4.0.1</servlet.version><jstl.version>1.2</jstl.version><standard.version>1.1.2</standard.version><tomcat-jsp-api.version>8.5.20</tomcat-jsp-api.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- spring 相关 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><!-- 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.driver.version}</version></dependency><!--4. log配置:Log4j2 + Slf4j --><!-- slf4j核心包 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j.version}</version><scope>runtime</scope></dependency><!--用于与slf4j保持桥接 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>${log4j.version}</version><exclusions><exclusion><artifactId>slf4j-api</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions></dependency><!--核心log4j2jar包 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>${log4j.version}</version></dependency><!--web工程需要包含log4j-web,非web工程不需要 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>${log4j.version}</version><scope>runtime</scope></dependency><!--需要使用log4j2的AsyncLogger需要包含disruptor --><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>${disruptor.version}</version></dependency><!--5. other --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${servlet.version}</version><scope>provided</scope></dependency><!--6. jstl --><dependency><groupId>javax.servlet.jsp.jstl</groupId><artifactId>jstl</artifactId><version>${jstl.version}</version></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>${standard.version}</version></dependency><!-- 7. jsp自定义标签依赖 (必须与tomcat的版本一致) --><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jsp-api</artifactId><version>${tomcat-jsp-api.version}</version><scope>provided</scope></dependency></dependencies>
注: 该依赖配置不仅包含了spring,同时也包含了hibernate,struts,mysql驱动等。
4.3 spring配置文件
<?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:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"></beans>
4.4 示例代码
4.4.1 示例1
1) Student
public class Student {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Demo [name=" + name + "]";}}
2) spring.xml 配置文件
<bean id="demo" class="org.lisen.springdemo.model.Demo"><property name="name"><value>张三</value></property></bean>
配置文件说明:
- id:在容器中查找Bean的id(唯一、且不能以/开头)
- class:bean的完整类名
- name:在容器中查找Bean的名字(唯一、允许以/开头、允许多个值,多个值之间用逗号或空格隔开)
- scope:(singleton|prototype)默认是singleton
singleton: 单例模式, 在每个Spring IoC容器中一个bean定义对应一个对象实例
prototype: 原型模式/多例模式, 一个bean定义对应多个对象实例 - parent:指定一个父bean(必须要有继承关系才行)
- abstract: 将一个bean定义成抽象bean(抽象bean是不能实例化的),抽象类一定要定义成抽象bean,非抽象类也可以定义成抽象bean
注: 在这里配置的name属性为简单的String属性,可以直接使用value进行配置。另外可以直接使用value设置的如下:
8基础数据+String+3个sql
java.util.Date
java.sql.Date
java.sql.Time
java.sql.Timestamp
3) 通过Spring的ApplicationContext获取Bean
public class SpringDemo {public static void main(String[] args) {ApplicationContext cxt = new ClassPathXmlApplicationContext("spring.xml");Student demo = (Student)cxt.getBean("demo");System.out.println(demo);}}
4.4.2 示例2 (abstract,parent示例)
1) Person
public class Student extends Person {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Demo [name=" + name + "]";}}
2) Student
public class Student extends Person {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Demo [name=" + name + "]";}}
3) 配置文件
<bean id="student" class="org.lisen.springdemo.model.Student" parent="person"><property name="name"><value>张三</value></property></bean><bean id="person" class="org.lisen.springdemo.model.Person" abstract="true"><property name="phone"><value>139751878778</value></property></bean>
4) 通过Spring的ApplicationContext获取Bean
public class SpringDemo {public static void main(String[] args) {ApplicationContext cxt = new ClassPathXmlApplicationContext("spring.xml");Student student = (Student)cxt.getBean("student");System.out.println(student.getName());System.out.println(student.getPhone());}}
4.4.3 使用有参数构造方法创建javaBean
constructor-arg
1) Worker
public class Worker extends Person {private String workName;public Worker(String workName) {this.workName = workName;}public String getWorkName() {return workName;}public void setWorkName(String workName) {this.workName = workName;}}
2)配置文件
<bean id="worker" class="org.lisen.springdemo.model.Worker" parent="person"><constructor-arg name="workName"><value>王小</value></constructor-arg><!-- 第二种方式<constructor-arg index="0"><value>王小</value></constructor-arg>--></bean>
3) 通过Spring的ApplicationContext获取Bean
public class SpringDemo {public static void main(String[] args) {ApplicationContext cxt = new ClassPathXmlApplicationContext("spring.xml");Student student = (Student)cxt.getBean("student");System.out.println(student.getName());System.out.println(student.getPhone());//构造函数注入Worker worker = (Worker)cxt.getBean("worker");System.out.println(worker.getWorkName());}}
4.4.4 init-method:指定bean的初始化方法
- 修改上面的Student类,加入一个init方法,注意该方法不能有参数
public class Student extends Person {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Demo [name=" + name + "]";}//init方法,不能有参数public void init() {System.out.println("Student init ....");}}
2) 修改Student类对应的配置文件
<bean id="student" class="org.lisen.springdemo.model.Student" parent="person" init-method="init"><property name="name"><value>张三</value></property></bean>
3) 运行原来的测试用例,会发生后台打印“Student init ....“,表示init-method正常调用。
4.4.5 复杂属性的配置
1) JavaBean属性注入
<bean id="student" class="org.lisen.springdemo.model.Student" parent="person" init-method="init"><property name="name"><value>张三</value></property><property name="addr" ref="addr"/></bean><bean id="addr" class="org.lisen.springdemo.model.Addr"><property name="city"><value>长沙</value></property></bean>
java部分代码比较简单,请根据配置文件自行完成。
2)List或数组
声明属性
private int[] arr;private List list;
配置文件
<property name="list"><list><value>123</value><value>456</value><value>789</value><value>asd</value></list></property>
3)Map
private Map map;
配置文件
<property name="map"><map><entry key="aa" value="123"/><entry key="bb" value="456"/><entry key="cc" value="789"/></map></property>
- Properties
private Properties prop;
配置文件
<property name="prop"><props><prop key="dd">qwer</prop><prop key="ee">tyu</prop><prop key="ff">iop</prop></props></property>
5. 多配置文件
系统一般会被分成多个模块,可以为每个模块配置一个配置文件,便于管理,在版本控制软件中也可以减少冲突
spring-a.xml 假设为a模块的配置文件
<?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:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"><bean id="student" class="org.lisen.springdemo.model.Student" parent="person" init-method="init"><property name="name"><value>张三</value></property><property name="addr" ref="addr"/></bean><bean id="addr" class="org.lisen.springdemo.model.Addr"><property name="city"><value>长沙</value></property></bean><bean id="person" class="org.lisen.springdemo.model.Person" abstract="true"><property name="phone"><value>139751878778</value></property></bean><bean id="worker" class="org.lisen.springdemo.model.Worker" parent="person"><constructor-arg name="workName"><value>王小</value></constructor-arg><!-- 第二种方式<constructor-arg index="0"><value>王小</value></constructor-arg>--></bean></beans>
spring.xml 为总的spring配置文件, 在总配置文件中导入其他模块即可。
<?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:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"><import resource="spring-a.xml"/></beans>
6. 与web集成
6.1 集成配置
在web.xml中加入如下配置:
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
6.2 获取配置的Bean
/*** 用于简化Bean的获取.* * ApplicationContextAware接口:* 实现了这个接口的bean,当spring容器初始化的时候,会自动的将ApplicationContext注入进来* * @author Administrator*/
public final class SpringBeanUtil implements ApplicationContextAware {private SpringBeanUtil() {}private static ApplicationContext cxt;@Overridepublic void setApplicationContext(ApplicationContext appContext) throws BeansException {cxt = appContext;}/*** 根据Bean的id来获取Bean对象* @param id 配置文件中的bean的id属性* @return Object*/@SuppressWarnings("unchecked")public static <T> T getBean(String id) {return (T)cxt.getBean(id);}}
配置文件
<bean
class="org.lisen.springdemo.util.SpringBeanUtil"/>相关文章:
Spring(入门)
1. 什么是spring,它能够做什么?2. 什么是控制反转(或依赖注入)3. AOP的关键概念4. 示例 4.1 创建工程4.2 pom文件4.3 spring配置文件4.4 示例代码 4.4.1 示例14.4.2 示例2 (abstract,parent示例)4.4.3 使用有参数构造方法创建jav…...
2023-02-25力扣每日一题
链接: https://leetcode.cn/problems/minimum-swaps-to-make-strings-equal/ 题意: 给定字符串s1,s2,仅由x,y组成 每次可以在两边各挑一个字符交换 求让s1等于s2的最小步骤 解: 1000啊1000,双指针贪一下就过了 …...
如何外网登录管理云通信短信网关平台?——快解析映射方案
云通信(Cloud Communications )是基于云计算商业模式应用的通信平台服务,简单易用,满足企业一键群发场景,支持多种语言SDK和API 接入。各个通信平台软件都集中在云端,且互通兼容,用户只要登录云通信平台,不…...
学习 Python 之 Pygame 开发魂斗罗(三)
学习 Python 之 Pygame 开发魂斗罗(三)继续编写魂斗罗1. 角色站立2. 角色移动3. 角色跳跃4. 角色下落继续编写魂斗罗 在上次的博客学习 Python 之 Pygame 开发魂斗罗(二)中,我们完成了角色的创建和更新,现…...
【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)
最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 分积木(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 吃火锅(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - RSA 加密算法(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 构成的正方形数量(2023.Q1) 【华为OD机试模拟…...
linux系统加exfat驱动
u盘假如是fat格式不支持大于4G文件,所以一般u盘用exfat格式,兼容性更好 有的老linux没支持exfat格式,那就自己装个驱动吧 sudo apt-get install exfat-fuse exfat-utils 有一台fedora27需要yum安装,国外源比较慢,改…...
3,预初始化(一)(大象无形9.2)
正如书中所说,预初始化流程由FEngineLoop::PreInit()所实现 主要处理流程 1,设置路径:当前程序路径,当前工作目录路径,游戏的工程路径 2,设置标准输出:设置GLog系统输出的设备,是输出到命令行…...
【PAT甲级题解记录】1013 Battle Over Cities (25 分)
【PAT甲级题解记录】1013 Battle Over Cities (25 分) 前言 Problem:1013 Battle Over Cities (25 分) Tags:DFS 连通图 Difficulty:剧情模式 想流点汗 想流点血 死而无憾 Address:1013 Battle Over Cities (25 分) 问题描述 给…...
CSS-关键帧动画
animation和transition的区别 相同点:都是随时间改变元素的属性值 不同点:transition需要触发一个时间(hover或者click事件)才会随时间改变其css属性;而animation在不需要触发任何事件的情况下也是可以显示的随时间变化来改变元素的css属性值,从而达到一种动画的效果,cs…...
Allegro如何画Photoplot_Outline操作指导
Allegro如何画Photoplot_Outline操作指导 在用Allegro进行PCB设计的时候,最后进行光绘输出前,Photoplot_Outline是必备一个图形,所有在Photoplot_Outline中的图形将被输出,Photoplot_Outline以外的图形都将不被输出。 如何绘制Photoplot_Outline,具体操作如下 点击Shape点…...
ChatGPT对于普通人有什么机会和影响?
ChatGPT爆火“出圈”,短短三个月里,势如破竹。 月活已经达到1亿,什么概念呢?Tiktok在海外达到1亿月活用了将近9个月时间,Instagram用了大约2年半,就连比尔盖茨都表示“Web3没那么重要,元宇宙没…...
【人工智能 AI】可以从 RPA 中受益的 10 个行业 10 Industries That Can Benefit From RPA
目录 RPA技术介绍 Which industries can use robotic process automation?哪些行业可以使用机器人过程自动化? Robotic process automation in the retail industry零售业中的机器人过程自动化 Robotic process automation in the construction industry建筑行业的机器人…...
PHP 程序如何实现加密解密?
PHP 中有很多加密和解密的函数可用,以下是一些常用的加密解密方式和函数:对称加密:对称加密是一种加密方式,使用同一个密钥加密和解密数据。PHP 中可用的对称加密算法包括 AES、DES、3DES 等。以下是一些常用的对称加密函数&#…...
使用IDEA社区版如何创建SpringBoot项目?
Spring Boot 就是 Spring 框架的脚⼿架,它就是为了快速开发 Spring 框架⽽诞⽣的。首先谈谈SpringBoot的优点:1.快速集成框架,Spring Boot 提供了启动添加依赖的功能,⽤于秒级集成各种框架。 2.内置运⾏容器,⽆需配置 …...
HTML、CSS学习笔记3(平面转换:位移、旋转、缩放,渐变)
1.平面转换 使用 transform 属性实现元素的位移、旋转、缩放等效果 2D转换 2D转换是改变标签在二维平面上的位置和形状 移动:translate 旋转:rotate 缩放:scale 1.1位移translate translate语法 x就是X轴上水平移动,正向为右…...
【C语言经典例题】打印菱形
目录 一、题目要求 二、解题思路 上半部分三角形 打印空格 打印星号* 下半部分三角形 打印空格 打印星号* 三、完整代码 代码 运行截图: 一、题目要求 输入一个整数n(n为奇数),n为菱形的高,打印出该菱形 例&a…...
easyExcel与poi版本不兼容导致的后台报错问题
1、背景:最新接手公司系统excel导入解析模块,点击批量导入,后台报错如下 com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/FileMagicat com.alibaba.excel.analysis.…...
Fiddler报文分析-断点应用、模拟网络限速-HTTPS的 拦截
目录 一、报文分析 Statistics 请求性能数据 检查器(Inspectors) 自定义响应(AutoResponder) Composer Composer的功能就是用来创建HTTP Request然后发送请求。 允许自定义请求发送到服务器,即可以手动创建一个新…...
PHP基础(3)
PHP基础表单提交文件处理PHP连接数据库异常抛出表单提交 PHP通过全局变量 $_GET和 $_POST来收集表单数据。 接下来改用post方式进行提交,再次查看是否隐藏了提交的内容: 发现提交的信息已经不在链接之中进行显示了。 GET与POST区别在于一个会在连接…...
跳槽进字节跳动了,面试真的很简单
前言: 最近金三银四跳槽季,相信很多小伙伴都在面试找工作, 怎样才能拿到大厂的offer,没有掌握绝对的技术,那么就要不断的学习 如何拿下阿里等大厂的offer的呢,今天分享一个秘密武器,资深测试工程师整理的…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
