当前位置: 首页 > news >正文

[Spring]一文明白IOC容器和思想

✅作者简介:大家好,我是Philosophy7?让我们一起共同进步吧!🏆
📃个人主页:Philosophy7的csdn博客
🔥系列专栏: 数据结构与算法
👑哲学语录: 承认自己的无知,乃是开启智慧的大门
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博>主哦🤞


文章目录

  • 一、Spring简介
    • 1.1、SpringFramework创始人
    • 1.2、Spring全家桶
    • 1.3、SpringFramework
      • 1) Feauture:
      • 2) SpringFramework五大模块
  • 二、IOC
    • 前言:
      • Container Overview
      • Bean Overview
    • 2.1、思想:
    • 2.2、IOC容器的实现
    • 2.3、基于XML管理Bean
      • `实操一:入门案例HelloWorld`
        • 1) 创建Maven项目
        • 2) 改pom.xml
        • 3) 创建HelloWorld类
        • 4) 创建配置文件
        • 5) 测试
        • 执行流程
      • `实操二: 获取Bean`
      • `实操三: 依赖注入setter方式`
        • 1) 创建实体类Person
        • 2) 配置Bean并实现属性赋值
        • 3) 测试
      • `实操四: 依赖注入构造器方式`
        • 1) 编写有参构造
        • 2)配置Bean
        • 3)测试
      • `实操五: 特殊值处理`
      • `实操六: 为引用类型赋值(级联赋值)`
        • 1) 创建身份证类IdCard
        • 2) 修改Person类
        • 3) 配置Bean
        • 4) 测试

一、Spring简介

[Spring | Home](https://spring.io/)官网地址,由于Spring是国外网站,可能访问速度会有点慢。

在这里插入图片描述

Spring使创建Java企业应用程序变得容易。它提供了在企业环境中使用Java语言所需的一切,支持Groovy和Kotlin作为JVM上的替代语言,并根据应用程序的需要灵活地创建多种体系结构。从Spring Framework 5.1开始,Spring需要JDK 8+ (Java SE 8+),并提供对JDK 11 LTS的开箱即用支持。Java SE 8 update 60被建议作为Java 8的最低补丁版本,但通常建议使用最新的补丁版本。

Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。

Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首 次在 Apache 2.0 许可下发布。 Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。

Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应 用程序是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO 编程模型来促进良好的编程实践。

1.1、SpringFramework创始人

Rod Johnson,Spring框架的创始人,同时也是SpringSource的联合创始人。Spring是面向切面编程(AOP)和控制反转(IoC)的容器框架。

在这里插入图片描述

1.2、Spring全家桶

[Spring | Projects](https://spring.io/projects)

在该链接可以看出Spring的生态包含哪些,在这我列举我们常用的Spring Framework、SpringBoot、SpringCloud、SpringSecurity、SpringAMQP等

1.3、SpringFramework

以Spring为基础框架,可以把Spring看作成地基,基本上所有的Spring项目都是以SpringFramework为基础的。

1) Feauture:

  • Core technologies: dependency injection, events, resources, i18n, validation, data binding, type conversion, SpEL, AOP.
  • Testing: mock objects, TestContext framework, Spring MVC Test, WebTestClient
  • Data Access: transactions, DAO support, JDBC, ORM, Marshalling XML.
  • Spring MVC and Spring WebFlux web frameworks.
  • Integration(集成): remoting, JMS, JCA, JMX, email, tasks, scheduling, cache.
  • Languages: Kotlin, Groovy, dynamic languages.

核心技术: 依赖注入(Dependency injection 简称DI)、事件、数据绑定、SPEL表达式、AOP面向切面等

测试: SpringMVC测试、WebTestClient等

数据访问: 事务、支持DAO、JDBC、ORM、XML

2) SpringFramework五大模块

功能模块功能介绍
Core Container核心容器,在 Spring 环境下使用任何功能都必须基于 IOC 容器。
AOP&AspectJs面向切面编程
Testings提供了对 junit 或 TestNG 测试框架的整合。
Data Access/Integration提供了对数据访问/集成的功能。
Spring MVC提供了面向Web应用程序的集成功能

二、IOC

Inversion of Control,反转控制。那么什么是控制反转呢,就是将对象的创建权改变了,创建对象的任务交给IOC容器进行管理。

//原始创建方式 --- 采用new的方式来创建对象
Object obj = new Object();

前言:

Container Overview

The org.springframework.context.ApplicationContext interface represents the Spring IoC container and is responsible for instantiating, configuring, and assembling the beans. The container gets its instructions on what objects to instantiate, configure, and assemble by reading configuration metadata. The configuration metadata is represented in XML, Java annotations, or Java code. It lets you express the objects that compose your application and the rich interdependencies between those objects.

Several implementations of the ApplicationContext interface are supplied with Spring. In stand-alone applications, it is common to create an instance of ClassPathXmlApplicationContext or FileSystemXmlApplicationContext. While XML has been the traditional format for defining configuration metadata, you can instruct the container to use Java annotations or code as the metadata format by providing a small amount of XML configuration to declaratively enable support for these additional metadata formats.

In most application scenarios, explicit user code is not required to instantiate one or more instances of a Spring IoC container. For example, in a web application scenario, a simple eight (or so) lines of boilerplate web descriptor XML in the web.xml file of the application typically suffices (see Convenient ApplicationContext Instantiation for Web Applications). If you use the Spring Tools for Eclipse (an Eclipse-powered development environment), you can easily create this boilerplate configuration with a few mouse clicks or keystrokes.

Bean Overview

A Spring IoC container manages one or more beans. These beans are created with the configuration metadata that you supply to the container (for example, in the form of XML <bean/> definitions).

Within the container itself, these bean definitions are represented as BeanDefinition objects, which contain (among other information) the following metadata:

  • A package-qualified class name: typically, the actual implementation class of the bean being defined.
  • Bean behavioral configuration elements, which state how the bean should behave in the container (scope, lifecycle callbacks, and so forth).
  • References to other beans that are needed for the bean to do its work. These references are also called collaborators or dependencies.
  • Other configuration settings to set in the newly created object — for example, the size limit of the pool or the number of connections to use in a bean that manages a connection pool.

以上内容来源于官网,为避免翻译难免有失偏颇,可自行翻译

2.1、思想:

IOC容器的引入,让我们的开发变的快捷、方便、高效,且IOC容器能够解耦合降低类与类之间的依赖关系。

①获取资源的传统方式:

传统的方式是组件主动的从容器中获取所需要的资源,在这样的 模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效 率。

②反转控制方式获取资源:

只需要将资源放入到容器之中,容器如何创建对象开发人员不需要关心,只需要明白如何从容器中获取这个资源即可。

③DI

DI(Dependency Injection) 依赖注入

DI 是 IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器 的资源注入。相对于IOC而言,这种表述更直接。

所以结论是:IOC 就是一种反转控制的思想, 而 DI 是对 IOC 的一种具体实现

2.2、IOC容器的实现

Spring 的 IOC 容器就是 IOC 思想的一个落地的产品实现。IOC 容器中管理的组件也叫做 bean。在创建 bean 之前,首先需要创建 IOC 容器。Spring 提供了 IOC 容器的两种实现方式:

  • BeanFactory
    • 这是 IOC 容器的基本实现,是 Spring 内部使用的接口。面向 Spring 本身,不提供给开发人员使用。
  • ApplicationContext
    • BeanFactory 的子接口,提供了更多高级特性。面向 Spring 的使用者,几乎所有场合都使用 ApplicationContext 而不是底层的 BeanFactory。

ApplicationContext的实现类

在这里插入图片描述

类型名简介
ClassPathXmlApplicationContext通过读取类路径下的 XML 格式的配置文件创建 IOC 容器对象
FileSystemXmlApplicationContext通过文件系统路径读取 XML 格式的配置文件创建 IOC 容 器对象
ConfigurableApplicationContextApplicationContext 的子接口,包含一些扩展方法 refresh() 和 close() ,让 ApplicationContext 具有启动、 关闭和刷新上下文的能力。
WebApplicationContext专门为 Web 应用准备,基于 Web 环境创建 IOC 容器对 象,并将对象引入存入 ServletContext 域中。

2.3、基于XML管理Bean

实操一:入门案例HelloWorld

1) 创建Maven项目

maven项目管理工具,来对项目进行管理

2) 改pom.xml

 <dependencies><!-- 基于Maven依赖传递性,导入spring-context依赖即可导入当前所需所有jar包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.1</version></dependency><!-- junit测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
</dependencies>

3) 创建HelloWorld类

public class HelloWorld {//编写方法public void sayHello(){System.out.println("Hello World");}
}

4) 创建配置文件

resource包下创建applicationContext.xml,通常都是以该文件名命名

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!--Spring约束 不用记 直接编写-->
<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标签将HelloWorld实例交给Spring IOC容器管理id: bean的唯一表示class: 设置bean对应的全类名
--><bean id="helloWorld" class="com.philosophy.spring.bean.HelloWorld"></bean>
</beans>

5) 测试

@Test
public void test() {//通过xml文件的方式来管理BeanApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//2.获取Bean对象 getBean可传递Bean的ID 或 对应的Class类对象HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld");//3.调用方法helloWorld.sayHello();
}

执行流程

在这里插入图片描述

1.创建组件类 --> 2.将组件配置到配置文件中 3.创建IOC容器对象 读取配置文件中的Bean 4.获取IOC中容器的对象 5.完成特定功能

实操二: 获取Bean

①方式一: 根据Bean的ID获取:

由于 id 属性指定了 bean 的唯一标识,所以根据 bean 标签的 id 属性可以精确获取到一个组件对象。 上个实验中我们使用的就是这种方式

//根据Bean的唯一标识来获取
HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld");

②方式二: 根据类型获取

HelloWorld helloWorld = context.getBean(HelloWorld.class);

③方式三:根据ID和类型获取

HelloWorld bean = context.getBean("helloWorld", HelloWorld.class);

④注意:

当根据类型获取Bean时,要求IOC容器中指定的类型Bean只能有一个

当IOC容器中一共配置了两个相同的类型时

<bean id="helloWorld" class="com.philosophy.spring.bean.HelloWorld"></bean>
<bean id="helloWorldTwo" class="com.philosophy.spring.bean.HelloWorld"></bean>

根据类型时获取Bean就会抛出异常

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.philosophy.spring.bean.HelloWorld' available: expected single matching bean but found 2: helloWorld,helloWorldTwo

实操三: 依赖注入setter方式

1) 创建实体类Person

package com.philosophy.spring.bean;public class Person {private Integer id; //IDprivate String name; //name名称private Integer age; //名称public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}

2) 配置Bean并实现属性赋值

<bean id="person" class="com.philosophy.spring.bean.Person"><!-- property标签:通过组件类的setXxx()方法给组件对象设置属性 --><!-- name属性:指定属性名(这个属性名是getXxx()、setXxx()方法定义的,和成员变量无关) --><!-- value属性:指定属性值 --><property name="id" value="1001"/><property name="name" value="张三"/><property name="age" value="20"/>
</bean>

3) 测试

@Test
public void testPerson() {//1.创建IOC容器ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//2.获取对象Person person = context.getBean(Person.class);System.out.println(person);
}

实操四: 依赖注入构造器方式

1) 编写有参构造

public Person(Integer id,String name,Integer age) {this.id = id;this.name = name;this.age = age;
}

2)配置Bean

<bean id="personTwo" class="com.philosophy.spring.bean.Person"><!--对照构造器中的参数顺序 一一赋值--><constructor-arg value="1002"/><constructor-arg value="李四"/><constructor-arg value="33"/>
</bean>

3)测试

@Test
public void testPerson02() {//1.创建IOC容器ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//2.获取对象Person person = (Person) context.getBean("personTwo");System.out.println(person);
}

实操五: 特殊值处理

①、什么是字面量?

//声明一个变量
int a = 10;

声明一个变量a,初始化值为10,此时a代表的是一个变量名称,当我们引用a时获取的是其值10

若a是一个带引号的'a',那么它就不是一个变量,它就是这个字母的本身,这就是字面量

<!-- 使用value属性给bean的属性赋值时,Spring会把value属性的值看做字面量 -->
<property name="name" value="张三"/>

②、null值

<!--为name属性 赋值为Null-->
<property name="name"><null />
</property><property name="name" value="null"></property> <!--等同于该操作-->

③CDATA

<property name="expression"><!-- 解决方案二:使用CDATA节 --><!-- CDATA中的C代表Character,是文本、字符的含义,CDATA就表示纯文本数据 --><!-- XML解析器看到CDATA节就知道这里是纯文本,就不会当作XML标签或属性来解析 --><!-- 所以CDATA节中写什么符号都随意 --><value><![CDATA[a < b]]></value>
</property>

实操六: 为引用类型赋值(级联赋值)

1) 创建身份证类IdCard

package com.philosophy.spring.bean;/*** 身份证类*/
public class IdCard {private String id; //身份证号public IdCard(String id) {this.id = id;}public IdCard() {}public String getId() {return id;}public void setId(String id) {this.id = id;}
}

2) 修改Person类

添加以下代码:

private IdCard idCard; //身份证号public IdCard getIdCard() {return idCard;
}public void setIdCard(IdCard idCard) {this.idCard = idCard;
}@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", idCard=" + idCard +'}';}

3) 配置Bean

 	<bean id="idCard" class="com.philosophy.spring.bean.IdCard"><property name="id" value="10086"/></bean><bean id="personThree" class="com.philosophy.spring.bean.Person"><property name="id" value="1003"/><property name="name" value="鸡哥"/><property name="age" value="23"/><!--ref属性: 引用IOC容器中某个Bean的id 将所对应的Bean为属性赋值--><property name="idCard" ref="idCard"/></bean>

4) 测试

@Testpublic void testPersonAndIdCard() {//1.创建IOC容器ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//2.获取对象Person person = (Person) context.getBean("personThree");System.out.println(person);}

相关文章:

[Spring]一文明白IOC容器和思想

✅作者简介&#xff1a;大家好,我是Philosophy7&#xff1f;让我们一起共同进步吧&#xff01;&#x1f3c6; &#x1f4c3;个人主页&#xff1a;Philosophy7的csdn博客 &#x1f525;系列专栏&#xff1a; 数据结构与算法 &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃…...

程序人生 | 与足球共舞的火柴人(致敬格拉利什,赋予足球更深的意义)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;秋招&#xff09; &#x1f680;未…...

MATLAB | R2023a更新了哪些好玩的东西

R2023a来啦&#xff01;&#xff01;废话不多说看看新版本有啥有趣的玩意和好玩的特性叭&#xff01;&#xff01;把绘图放最前面叭&#xff0c;有图的内容看的人多。。 1 区域填充 可以使用xregion及yregion进行区域填充啦&#xff01;&#xff01; x -10:0.25:10; y x.^…...

Python Module — OpenAI ChatGPT API

目录 文章目录目录OpenAI Python SDKopenai.ChatCompletion 模块openai.ChatCompletion.create 函数OpenAI Python SDK 官方文档&#xff1a;https://platform.openai.com/docs/api-reference/introduction OpenAI Python SDK 用于开发与 OpenAI RESTful API 进行交互的客户端…...

Docker学习记录

阅读前请看一下&#xff1a;我是一个热衷于记录的人&#xff0c;每次写博客会反复研读&#xff0c;尽量不断提升博客质量。文章设置为仅粉丝可见&#xff0c;是因为写博客确实花了不少精力。希望互相进步谢谢&#xff01;&#xff01; 文章目录阅读前请看一下&#xff1a;我是一…...

Linux-VIM使用

文章目录前言VIM使用1、切换模式2、跳转(1) 跳转到指定行(2) 跳转到首行(3) 跳转到末行3、自动格式化程序4. 大括号对应5. 删除&#xff08;1&#xff09;删除一个单词&#xff08;2&#xff09;删除光标位置至行尾&#xff08;3&#xff09;删除光标位置至行首&#xff08;4&a…...

Windows安全中心内存完整性无法打开问题的处理方法

Windows11安全中心内存完整性无法打开 今天电脑使用过程中突然看到系统桌面右下角任务栏中 windows安全中心图标出现了警告信息&#xff0c;如下图红框所示&#xff1a; 点击该图标进入windows安全中心的 安全性概览 界面&#xff0c;如下图&#xff1a; 在该界面可以看到出现安…...

在芯片设计行业,从项目的初期到交付,不同的岗位的工程师主要负责什么?

大家都知道在芯片设计行业&#xff0c;项目是至关重要的一环。从项目的初期到交付&#xff0c;不同的岗位的工程师在项目的各环节主要负责什么?他们是怎样配合的?下面看看资深工程师怎么说。 一个项目&#xff0c;从初期到交付的过程是比较漫长的。我们知道最早的时候&#…...

Spring Cloud Alibaba全家桶(七)——Sentinel控制台规则配置

前言 本文小新为大家带来 Sentinel控制台规则配置 相关知识&#xff0c;具体内容包括流控规则&#xff08;包括&#xff1a;QPS流控规则&#xff0c;并发线程数流控规则&#xff09;&#xff0c;BlockException统一异常处理&#xff0c;流控模式&#xff08;包括&#xff1a;直…...

mysql-installer安装教程(详细图文)

目录 1.安装 2.配置系统环境变量 3.配置初始化my.ini文件 4.MySQL彻底删除 5.Navicat 安装 1.安装 先去官网下载需要的msi&#xff0c;在这放出官网下载地址下载地址 这里我具体以8.0.28 为安装例子&#xff0c;除了最新版安装界面有些变动以往的都是差不多的。 过去的版本…...

微服务架构第一阶段(nacos,gateWay,RPC)

最近在学习完 springcloud 微服务架构之后&#xff0c;自己用了之前的一个项目计划拆分成微服务的项目&#xff0c;第一阶段要求整合 nacos&#xff0c;RPC以及gateWay&#xff0c;首先来看一下几个技术组件的概念 RPC RPC 框架 —— 远程过程调用协议RPC&#xff08;Remote …...

【Azure 架构师学习笔记】-Azure Data Factory (5)-Managed VNet

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Data Factory】系列。 接上文【Azure 架构师学习笔记】-Azure Data Factory (4)-触发器详解-事件触发器 前言 PaaS服务默认都经过公网传输&#xff0c; 这对很多企业而言并不安全&#xff0c;那么就需要对其进行安全改…...

ActiveMQ(三)

协议配置 ActiveMQ 支持的协议有 TCP 、 UDP、NIO、SSL、HTTP(S) 、VM 这是activemq 的activemq.xml 中配置文件设置协议的地方 <transportConnector name"openwire" uri"tcp://0.0.0.0:61616?maximumCon nections1000&amp;wireFormat.maxFrameSiz…...

区块链多方计算 人工智能学习笔记

区块链&#xff1a;让数据不被篡改&#xff0c;但需要复制数据给每一块&#xff0c;造成数据泄露 多方计算 &#xff1a; 让数据用途可控。数控可用但不可见。 人工智能&#xff1a;数据更难造假 主讲人简介&#xff1a; 徐葳&#xff0c;宾夕法尼亚大学学士&#xff08;在清华…...

基于opencv的边缘检测方法

1、梯度运算 用OpenCV的形态变换&#xff08; 膨胀、腐蚀、开运算和闭运算&#xff09;函数morphologyEx 梯度运算即膨胀结果-腐蚀结果&#xff1a; 【注意】对于二值图像来说&#xff0c;必须是前景图像为白色&#xff0c;背景为黑色&#xff0c;否则需要进行反二值化处理 …...

视频封装格式篇(TS)

本篇介绍下TS的封装格式。 1.什么是TS&#xff1f; TS&#xff08;Transport Stream&#xff0c;传输流&#xff09;&#xff0c;一种常见的视频封装格式&#xff0c;是基于MPEG-2的封装格式&#xff08;所以也叫MPEG-TS&#xff09;&#xff0c;后缀为.ts。 2.TS的分层结构 …...

静态路由+DHCP实验(四路由器八PC)

一.200.1.1.0/24子网划分 1.划分八个子网 2.选用前5个&#xff0c;第五个子网再划分4个子网作为骨干 二.规划路由 三.配置&#xff08;下一跳&#xff09; 1.先依次实现四个路由器之间全网可通 2.为路由器配置地址池&#xff0c;使用全局模式获取dhcp&#xff0c;指定网关…...

数据挖掘(作业汇总)

目录 环境配置 实验1 数据 作业2 环境配置 实验开始前先配置环境 以实验室2023安装的版本为例&#xff1a; 1、安装anaconda&#xff1a;&#xff08;anaconda自带Python,安装了anaconda就不用再安装Python了&#xff09; 下载并安装 Anaconda3-2022.10-Windows-x86_64.ex…...

基于微信小程序的图书馆选座系统源码

开发环境及工具&#xff1a; 大等于jdk1.8&#xff0c;大于mysql5.5&#xff0c;idea&#xff08;eclipse&#xff09;&#xff0c;微信开发者工具 技术说明&#xff1a; springboot mybatis 小程序 代码注释齐全&#xff0c;没有多余代码&#xff0c;适合学习&#xff08;…...

K8S 三种探针 readinessProbe、livenessProbe和startupProbe

一、POD状态 Pod 常见的状态 Pending&#xff1a;挂起&#xff0c;我们在请求创建pod时&#xff0c;条件不满足&#xff0c;调度没有完成&#xff0c;没有任何一个节点能满足调度条件。已经创建了但是没有适合它运行的节点叫做挂起&#xff0c;这其中也包含集群为容器创建网络…...

Android 设置背景颜色透明度

前言 本章是对设计给出的颜色做透明度的处理 原因 一般情况下我们是不需要做处理的&#xff0c;那为什么又需要我们做透明度呢&#xff0c;原因就是咱们的设计小哥哥、小姐姐们没有自己做处理&#xff0c;如果处理了的话&#xff0c;我们直接使用设计标注的AHEX颜色就行&a…...

聚类算法层次聚类

###cluster.py #导入相应的包 import scipy import scipy.cluster.hierarchy as sch from scipy.cluster.vq import vq,kmeans,whiten import numpy as np import matplotlib.pylab as plt #生成待聚类的数据点,这里生成了20个点,每个点4维: pointsscipy.randn(20,4) #加一…...

js 数据类型

1.概念 数据类型指的是可以在程序中存储和操作的值的类型&#xff0c;每种编程语言都有其支持的数据类型&#xff0c;不同的数据类型用来存储不同的数据&#xff0c;例如文本、数值、图像等。 JavaScript 是一种动态类型的语言&#xff0c;在定义变量时不需要提前指定变量的类…...

多级评论单表结构设计

这里的多级&#xff0c;本质上其实也就二级&#xff0c;例如微博的评论&#xff0c; 一级评论&#xff1a; 对微博的评论 二级评论&#xff1a; 对微博下的评论的回复评论 &#xff0c;这里包括二种 1. 回复的是一级评论&#xff0c; 2, 回复的是二级评论 效果如下 表数据 查…...

Mac M1通过VMWare Fusion安装Centos7记录(镜像和网络有大坑)

以前用linux系统基本都在我的服务器上或者是在win上进行&#xff0c;从没有在M1上进行创建&#xff0c;因此走了一些坑吧&#xff0c;这里会列出我的详细安装步骤。 下载镜像 镜像的下载网站&#xff1a;https://www.centos.org/download/ 在该网站中&#xff0c;不管是Every…...

女生适合当程序员吗?

在这个节日里&#xff0c;让我们来讨论一个比较热门的话题吧。女生到底适不适合当程序员&#xff1f; 在开启这个话题前&#xff0c;我们先来认识一位伟大的女性吧。 阿达洛芙莱斯&#xff08;Augusta Ada King&#xff09;是著名英国诗人拜伦之女&#xff0c;她本职是一位数…...

昇腾AI机器人发布,12家企业、5家高校签约,昇腾AI开发者创享日全国巡展沈阳首站成功举办

“创未来&#xff0c;享非凡”昇腾AI开发者创享日2023年全国巡回首站活动成功举办&#xff0c;本次活动由辽宁省科技厅指导&#xff0c;由沈阳市科技局、浑南区人民政府、沈阳高新区管理委员会、华为技术有限公司共同主办&#xff0c;沈阳昇腾人工智能生态创新中心承办&#xf…...

anaconda如何改变虚拟环境安装路径

1、查看anaconda的环境配置&#xff08;对应结果如下图所示&#xff09; conda config --show 或者 conda info 查看虚拟环境安装位置的结果如上图所示 2、修改配置语法 conda config --add key value #添加语法 conda config --remove key value #删除语法 其中&#xff0…...

根据卫星运动矢量计算轨道六根数

前言 STK软件在给定六根数时&#xff0c;可求得卫星位置和速度矢量&#xff0c;但有时我们通过星历参数得到卫星的位置和速度矢量&#xff0c;希望能够反演得出卫星轨道的六根数。从而方便对该卫星轨道进行仿真模拟。 计算过程 给定卫星在J2000坐标系下的的位置矢量r和速度矢…...

关于微信小程序安装npm的过程,从下载到小程序内部安装完成

1.先从官网下载nodejs 网站为Node.js (nodejs.org)&#xff0c;选择左边第一个2 然后一直next&#xff0c;选默认就行 选择自己喜欢的路径我的是D:\nodejs-v18.12.1 3 下载完成后&#xff0c;先在安装文件夹中新建两个文件夹 node_cache node_global 4 配置一下环境变量&…...

如何把网站推广出去/长沙弧度seo

-2021年2月21日发(作者&#xff1a;蒙枫)本文来自男装女装&#xff1a;第四套选择题&#xff1a;(第1-10题每题一分&#xff0c;其余每题1.5分&#xff0c;共100分)1)在下列选项中&#xff0c;测试人员从()开始介入最有利于软件项目的成功。a)需求分析阶段b)设计阶段c)编码阶段…...

wordpress虚拟资源主题/网页设计代码大全

什么是函数式编程&#xff1f;百科定义&#xff1a;函数式编程是种编程方式&#xff0c;它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算&#xff08;lambda calculus&#xff09;&#xff0c;而且λ演算的函数可以接受函数当作输入&#xff08;参数&#xff09…...

wordpress js上传图片/seo公司多少钱

我们建立一个工程后&#xff0c;会在Supporting files下面看到一个"工程名-Info.plist"的文件&#xff0c;这个是对工程做一些运行期配置的文件&#xff0c;很重要&#xff0c;不能删除。 下面就对其key值和其对应的value值进行解读: Localiztion native development…...

什么是seo站内优化/衡阳网站建设公司

跨线程调用 &#xff1a;传递数据&#xff0c;传递对象&#xff0c;委托Delegate, Action&#xff0c;Thread.数据有状态&#xff0c;线程有状态跨进程调用ipc: named pipe, 信号量&#xff0c;共享内存&#xff0c;虚拟文件&#xff0c;端口号跨远程调用rpcRPC(远程过程调用)…...

衡水企业做网站/seo外链资源

适配器模式将某个类的接口转换成客户端期望的另一个接口表示&#xff0c;目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类&#xff1a;类的适配器模式、对象的适配器模式、接口的适配器模式。首先&#xff0c;我们来看看类的适配器模式&#xff0c;先看类图&…...

南京公司网站建设/网络营销推广服务商

01、查看当前open用户 select username,account_status,expiry_date,profile from dba_users; 02、查看目前的密码过期策略 select * from dba_profiles s where s.profileDEFAULT and resource_namePASSWORD_LIFE_TIME; 03、修改密码过期策略 alter profile default limi…...