Spring之IOC容器(依赖注入)基本介绍基本配置多模块化

news2024/11/14 20:34:39

标题一:什么是spring,它能够做什么?

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

Spring项目出发点:

目的:提供一种贯穿始终的解决方面,将各种专用框架整合成一个连贯的整体框架,简化企业级应用的开发(有点像粘合剂)
鼓励最佳实践: 例如spring将“针对接口编程”的成本降到了最小
非侵入性: 应用对象尽量避免依赖框架,IoC和AOP是避免依赖的关键技术
统一配置: 好的框架应该让应用配置灵活且统一
易于测试: 使单元测试尽可能简单
可扩展:
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
在这里插入图片描述

什么是控制反转(或依赖注入)

控制反转(IoC=Inversion of Control)IoC,用白话来讲,就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
IoC还有一个另外的名字:“依赖注入 (DI=Dependency Injection)” ,即由容器动态的将某种依赖关系注入到组件之中。

AOP的关键概念

  • 连接点(Joinpoint):程序执行过程中明确的点,如方法的调用,或者异常的抛出.
  • 目标(Target):被通知(被代理)的对象
  • 通知(Advice):在某个特定的连接点上执行的动作,同时Advice也是程序代码的具体实现,例如一个实现日志记录的代码(通知有些书上也称为处理)
  • 代理(Proxy):将通知应用到目标对象后创建的对象(代理=目标+通知),请注意:只有代理对象才有AOP功能,而AOP的代码是写在通知的方法里面的
  • 切入点(Pointcut):多个连接点的集合,定义了通知应该应用到那些连接点。(也将Pointcut理解成一个条件 ,此条件决定了容器在什么情况下将通知和目标组合成代理返回给外部程序)
  • 适配器(Advisor):适配器=通知(Advice)+切入点(Pointcut)

示例

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.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
</beans>

4.4 示例代码
4.4.1 示例1

public class Student {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Demo [name=" + name + "]";
	}
}

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;
	}
	@Override
	public String toString() {
		return "Demo [name=" + name + "]";
	}
}

Student

public class Student extends Person {
	
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public 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;
	}
 
	@Override
	public 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>

4.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>
  1. 多配置文件
    系统一般会被分成多个模块,可以为每个模块配置一个配置文件,便于管理,在版本控制软件中也可以减少冲突

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.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://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.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
	
	<import resource="spring-a.xml"/>
	
</beans>
  1. 与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;
 
	@Override
	public 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"/>

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

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

相关文章

【计算机视觉 | CNN】Image Model Blocks的常见算法介绍合集(一)

文章目录 一、Residual Block二、Bottleneck Residual Block三、Dense Block四、Squeeze-and-Excitation Block五、Inception Module六、Non-Local Block七、Spatial Attention Module八、Spatial Transformer九、ResNeXt Block十、Fire Module十一、Inception-v3 Module十二、…

数据结构与算法(C语言版)P2---线性表之顺序表

前景回顾 #mermaid-svg-sXTObkmwPR34tOT4 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-sXTObkmwPR34tOT4 .error-icon{fill:#552222;}#mermaid-svg-sXTObkmwPR34tOT4 .error-text{fill:#552222;stroke:#552222;}#…

拥有这个中文版CustomGPT,你也能定制自己的AI问答机器人

人工智能技术的快速发展为各行各业带来了前所未有的机会&#xff0c;其中之一就是定制化的问答机器人。这些机器人可以用于客户支持、知识管理、虚拟助手等多个领域&#xff0c;帮助企业提高效率&#xff0c;提供更好的用户体验。很多人可能都知道通过CustomGPT能够设计自己的人…

Golang使用sqlx报错max_prepared_stmt_count超过16382

文章目录 背景mysql的预处理查看实例预处理详情com_stmt_prepare开启performance_schema 本地查看预处理语句 预处理语句飙升的原因生成预处理语句但是不close执行sql过程中发生错误 go服务分析抓包分析发送给mysql的包debug查看预处理细节sqlx发送statement command指令sqlx关…

伦敦银时走势与获利机会

交易时间灵活、资金杠杆充沛是伦敦银交易的主要优势&#xff0c;投资者应该充分利用这个品种的制度优势&#xff0c;结合自己个人的作息时间&#xff0c;在工作、投资与生活三者之间取得平衡的前提下&#xff0c;借助国际白银市场的波动&#xff0c;通过交易逐步实现自己的财富…

外贸电商商品如何做好上架工作?

跨境电商业务的蓬勃发展已经成为互联网行业的热点话题之一。不论是将海外货源卖回国内&#xff0c;还是通过国内货源销往海外&#xff0c;跨境电商平台都面临着如何实现商品上架的关键问题。在这篇文章中&#xff0c;将探讨成功上架商品的关键步骤。 一、准备好接口。 跨境电商…

【LangChain系列 10】Prompt模版——Message的partial用法

原文地址&#xff1a;【LangChain系列 10】Prompt模版——Message的partial用法 本文速读&#xff1a; 字符串partial 方法partial partial是什么意思呢&#xff1f;简单来说&#xff1a;将一个prompt模版传入部分变量值而生成一个新的prompt模版&#xff0c;当使用新的promp…

小技巧!Python生成excel文件的三种方式!

在我们做平常工作中都会遇到操作excel&#xff0c;那么今天写一篇&#xff0c;如何通过python操作excel。当然python操作excel的库有很多&#xff0c;比如pandas&#xff0c;xlwt/xlrd&#xff0c;openpyxl等&#xff0c;每个库都有不同的区别&#xff0c;具体的区别&#xff0…

递归路由,怎么递归的?BGP4+

问题 R2上去往5&#xff1a;&#xff1a;5的递归路由怎么生成的&#xff1f;&#xff1f;&#xff1f; BGP4路由表 Destination : 5:: PrefixLength : 64 NextHop : 4::4 Preference : 255 Cost : …

sed命令在Mac和Linux下的不同

问题 &#xff08;1&#xff09;Windows系统里&#xff0c;文件每行结尾是<回车><换行>, \r\n &#xff08;2&#xff09;Mac系统里&#xff0c; 文件每行结尾是<回车>&#xff0c;即\r &#xff08;3&#xff09;Unix系统里&#xff0c; 文件每行…

Sleuth--链路追踪

1 链路追踪介绍 在大型系统的微服务化构建中&#xff0c;一个系统被拆分成了许多模块。这些模块负责不同的功能&#xff0c;组合成系统&#xff0c;最终可以提供丰富的功能。在这种架构中&#xff0c;一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上&…

Python技巧---tqdm库的使用

文章目录 一、tqdm基本知识二、在pytorch中使用tqdm 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、tqdm基本知识 “tqdm” 是一个 Python 库&#xff0c;用于在命令行界面中创建进度条。 基本使用如下&#xff1a; from tqdm import tqdm impor…

linux安装nacos2.2.0

1、使用docker拉取镜像&#xff1a;docker pull nacos/nacos-server:v2.2.0 2、下载官方配置文件&#xff1a;https://github.com/alibaba/nacos/releases 3、修改配置文件的数据库连接信息&#xff0c;修改完成后将配置文件移至挂载目录/home/shixp/docker/nacos/conf&#xf…

无涯教程-JavaScript - ISNONTEXT函数

描述 如果指定的值引用的不是文本,则ISNONTEXT函数将返回逻辑值TRUE。否则返回FALSE。如果该值引用空白单元格,则该函数返回TRUE。 语法 ISNONTEXT (value)争论 Argument描述Required/OptionalvalueValue or expression or a reference to a cell.Required Notes 您可以在…

Echarts 饼图的详细配置过程

文章目录 饼图 简介配置步骤简易示例 饼图 简介 Echarts饼图是Echarts中常用的一种图表类型&#xff0c;也是数据可视化中常用的一种形式。饼图通过扇形的方式展示数据的比例和占比关系。 Echarts饼图的特点如下&#xff1a; 直观的数据占比展示&#xff1a;饼图通过不同大小…

Fast-MVSNet CVPR-2020 学习笔记总结 译文 深度学习三维重建

文章目录 6 Fast-MVSNet CVPR-20206.0 主要特点6.1 网络介绍6.2 稀疏高分辨率深度图预测6.3 深度图扩展6.4 -Newton 精细化MVSNet系列最新顶刊 对比总结6 Fast-MVSNet CVPR-2020 深度学习三维重建 Fast-MVSNet-CVPR-2020(源码、原文、译文、批注) 下载 6.0 主要特点 Spare …

数据结构与算法(三)--栈

一、前言 前两篇文章我们学习了第一个数据结构&#xff0c;数组&#xff0c;且从底层通过java实现了数组的构建和增删改查的操作功能&#xff0c;并且通过resize操作使我们的数组可以动态的扩容或者缩容。且我们知道数组最大的优点就是在索引有语义的情况下&#xff0c;查询和…

VS2013任意一个项目配置Tiff环境

1.包含目录库目录 2.链接器输出tiff.lib 3.文件夹里放一些东西

北邮22级信通院数电:Verilog-FPGA(1)实验一“跑通第一个例程” 过程中遇到的常见问题与解决方案汇总(持续更新中)

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 问题一&#xff1a;Verilog代码没有跑通 报…

如何维护物流中心电力系统?这个方法太炸裂了

物流中心是现代供应链管理中的关键环节之一&#xff0c;它承担着货物存储、分拣和分发的任务。而物流中心的正常运营离不开可靠的电力供应。 配电柜&#xff0c;作为电力系统的关键组成部分&#xff0c;负责分配电能到各个设备和区域&#xff0c;因此其运行状态至关重要。为了确…