Spring+SpringMVC+SpringBoot

Spring

bean

bean基础配置

bean别名配置

注意事项:

获取bean无论是通过id还是name获取。如果无法获取到,将抛出异常NoSuchBeanDefinitionException

bean的作用范围配置

适合交给容器进行管理的bean

表现层对象、业务层对象、数据层对象、工具对象

不适合交给容器进行管理的bean

封装实体的域对象

bean实例化的三种方式

bean实例化--构造方法

提供可访问的构造方法

配置

无参构造方法如果不存在,将抛出异常BeanCreationException

bean实例化--静态工厂(了解)

静态工厂

配置

bean实例化--实例工厂与FactoryBean(了解)

实例工厂

配置

FactoryBean

配置

bean的生命周期

生命周期:从创建到消亡的完整过程

bean生命周期:bean从创建到销毁的整体过程

bean生命周期控制:在bean创建后到销毁前做一些事情

提供生命周期控制方法

控制生命周期控制方法

核心容器

依赖注入方式

setter注入

构造器注入

自动装配

集合注入

  

加载properties文件

1.开启context命名空间

2.使用context空间加载properties文件

3.使用${}读取加载的属性值

加载properties文件

容器

容器初始化,创建容器

获取bean

容器类层次结构图

核心容器总结

容器相关

bean相关

依赖注入相关

注解

注解开发bean

纯注解开发模式

1.定义bean

@Component是通用的

@Controller

@Service

@Repository

2.纯注解开发

@Configuration注解用于设定当前类为配置类

@ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式

//加载配置文件初始化容器

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

变为

//加载配置类初始化容器

ApplicationContext ctx=new AnnotationConfigApplicationContext(SpringConfig.class);

注解开发依赖注入

bean的作用范围

使用@Scope定义作用范围

使用@PostConstruct,@PreDestroy定义bean生命周期

@Scope("singleton")

    public class BookDaoImpl implements BookDao {
        public BookDaoImpl(){
            System.out.println("book dao constructor...");
        }

        @PostConstruct
        public void init() {
            System.out.println("init");
        }
        @PreDestroy
        public void destrop() {
            System.out.println("destrop");
        }
    }

注解开发依赖注入

使用@Autowired注解开启自动装配模式(按类型)
@Service
    public class BookServiceImpl implements BookService {
        @Autowired
        @Qualifier("bookDao")
        private BookDao bookDao;

        public void save() {
            System.out.println("book service save ...");
            bookDao.save();
        }
    }

注意:自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法

注意:自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法

使用@Qualifier注解开启指定名称装配bean
@Service
public class BookServiceImpl implements BookService {
    @Autowired
    @Qualifier("bookDao")
    private BookDao bookDao;
}

注意:使用@Qualifier注解无法单独使用,必须配合@Autowired注解使用

使用@value实现简单注入
@Repository("bookDao")
    public class BookDaoImpl implements BookDao {
        @Value("itheima")
        private String name;
        public void save() {
            System.out.println("book dao save..." + name);
        }
    }

注意:路径仅支持单一文件配置,多文件请使用数组格式配置,不允许使用通配符*

注解开发管理第三方bean

第三方bean管理

1.使用@Bean配置第三方Bean

@Configuration
    public class SpringConfig {
        //1.定义一个方法获得要管理的对象
        //2.添加@Bean,表示该方法的返回值是一个bean
        @Bean
        public DataSource dataSource(){
            DruidDataSource ds=new DruidDataSource();
            ds.setDriverClassName("com.mysql.jdbc.Driver");
            ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
            ds.setName("root");
            ds.setPassword("root");
            return ds;
        }
    }

2.使用独立的配置类管理第三方Bean

将独立的配置类加入核心配置

方式一:导入式

public class jdbcConfig {
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds=new DruidDataSource();
        /*ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
        ds.setName("root");
        ds.setPassword("root");*/
        //相关配置
        return ds;
    }
}

使用@Import注解手动加入配置类到核心配置,此注解只能添加一次,多个数据请用数组格式

@Configuration
    @Import({jdbcConfig.class})
    public class SpringConfig {
    }

方式二:扫描式(不推荐)

@Configuration
public class jdbcConfig {
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds=new DruidDataSource();
        /*ds.setDriverClassName("com.mysql.jdbc.Driver");
		  ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
		  ds.setName("root");
		  ds.setPassword("root");*/
        //相关配置
        return ds;
    }
}

使用@ComponetScan注解扫描配置类所在的包,加载对应的配置类信息

@Configuration
    @ComponentScan("com.itheima.config")
    public class SpringConfig {
    }

注解开发实现为第三方bean注入资源

1.简单类型的注入
public class jdbcConfig {
    @Value("com.mysql.jdbc.Driver")
    private String driver;
    @Value("jdbc:mysql://localhost:3306/spring_db")
    private String url;
    @Value("root")
    private String userName;
    @Value("root")
    private String password;

    @Bean
    public DataSource dataSource(){
        DruidDataSource ds=new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setName(userName);
        ds.setPassword(password);
        //相关配置
        return ds;
    }
}
2.引用类型的注入
public class jdbcConfig {
    @Bean
    public DataSource dataSource(BookDao bookDao){
        System.out.println(bookDao);
        DruidDataSource ds=new DruidDataSource();
        //相关配置
        return ds;
    }
}

引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象

@Configuration
    @Import({jdbcConfig.class})
    @ComponentScan("com.itheima")
    public class SpringConfig {

    }
@Repository("bookDao")
    public class BookDaoImpl implements BookDao { 
        public void save() {
            System.out.println("book dao save..." );
        }
    }

注解开发总结

XML配置对比注解配置

整合

spring整合mybatis

思路分析

MyBatis程序核心对象分析

核心对象为SqlSessionFactoryBuilder

整合MyBatis

整合MyBatis

添加坐标,版本号要匹配

添加配置类替换xml文件

具体替换:

spring整合JUnit

添加依赖坐标

使用Spring整合JUnit专用的类加载器:@RunWith(SpringJUnit4ClassRunner.class)

指定spring的配置:@ContextConfiguration(classes=SpringConfig.class)

要测谁就自动装配谁:@Autowired

AOP

AOP简介

AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构

作用:在不惊动原始设计的基础上为其功能进行功能增强

Spring理念:无入侵式/无侵入式

AOP核心概念

连接点:JoinPoint,可以被AOP控制的方法(暗含方法执行时的相关信息)

程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等

在SpringAOP中,理解为方法的执行

切入点:PoingCut,匹配连接点的条件,通知仅会在切入点方法执行时被应用。

匹配连接点的式子

在SpringAOP中,一个切入点可以只描述一个具体方法,也可以匹配多个方法

通知:Advice,指哪些重复的逻辑,也就是共性功能(最终体现为一个方法)

在切入点出执行的操作,也就是共性操作

在SpringAOP中,功能最终以方法的形式呈现

切面:Aspect,描述通知与切入点的对应关系

通知类:定义通知的类

目标对象:Target,通知所应用的对象

原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成最终工作的

代理:Proxy,目标对象无法直接完成工作,需要对其功能进行回填,通过原始对象的代理对象实现

AOP工作流程

1.Spring容器启动

2.读取所有切面配置中的切入点(只读取pt(),不读取ptx()

3.初始化bean,判定bean对应的类中的方法是否匹配到任意切入点

*匹配失败,创建对象

*匹配成功,创建原始对象(目标对象)的代理对象

4.获取bean执行方法

*获取bean,调用方法并执行,完成操作

*获取bean是代理对象时,根据代理对象的运行模式运行原始方法与增强的内容,完成操作

AOP切入点表达式

切入点:要增强的方法

切入点表达式:要进行增强的方法的描述方式

描述方式一:执行com.itheima.dao包下的BookDao接口中的无参数update方法

execution(void com.itheima.dao.BookDao.update())

描述方式二:执行com.itheima.dao.impl包下的BookDaoImpl类中的无参数update方法

切入带你表达式标准格式:动作关键字(访问修饰符 返回值 包名.类/接口名.方法名(参数)异常名)

execution(public User com.itheima.service.UserService.findById(int))

动作关键字:描述切入点的行为动作,例如execution表示执行到指定切入点

访问修饰符:public,private等,可以省略

返回值

包名

类/接口名

方法名

参数

异常名:方法定义中抛出指定异常,可以省略

可以使用通配符描述切入点,快速描述

*:单个独立的任意符号,可以单独出现,也可以作为前缀或者后缀的匹配符出现

..:多个连续的任意符号,可以独立出现,常用于简化包名与参数的书写

+:专用于匹配子类类型

书写技巧

所有代码按照标准规范开发,否则以下技巧全部失效.

描述切入点通常描述接口,而不描述实现类.

访问控制修饰符针又书妾口开发均采用 public 描述(可省略访问控制修饰符描述).

返回值类型对于增删改类使用精准类型加速匹配,对于查询类使用*通配快速描述.

包名书写尽量不使用..匹配,效率过低,常用*做单个包描述匹配,或精准匹配.

接口名/类名书写名称与模块相关的采用*匹配,例如 Userservice 书写成* Service ,绑定业务层接口名.

方法名书写以动词进行精准匹配,名词采用*匹配,例如 getByld 书写成getBy*, selectAll 书写成 selectAll .

参数规则较为复杂,根据业务方法灵活调整.

通常不使用异常作为匹配规则

AOP通知类型

AOP通知描述了抽取的共性功能,根据共性功能抽取的位置不同,最终运行代码时要将其加入到合理的位置

AOP通知共分为5种类型

前置通知

后置通知

环绕通知(重点)

返回后通知(了解)

抛出异常后通知(了解)

AOP通知获取数据

获取切入点方法的参数

JoinPoint:适用于前置、后置、返回后、抛出异常后通知

ProceedJoinPoint::适用于环绕通知

获取切入点方法返回值

返回后通知

环绕通知

获取切入点方法运行异常通知

抛出异常后通知

环绕通知

事务

事务简介

事务作用:在数据层保障一系列的数据库操作同成功同失败

Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败

1.在业务层接口上添加Spring事务管理

注意事项

Spring注解式事务通常添加在业务层接口中方而不会添加到业务层实现类中,降低耦合

注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务

2.设置事务管理器

注意事项

事务管理器要根据实现技术进行选择

MyBatis框架使用的是JDBC事务

3.开启注解式事务驱动

事务角色

事务角色

事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法,

事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法

事务属性

事务传播行为:事务协调员对事务管理员所携带事务的处理态度

SpringMVC

SpringMVC简介

SpringMVC概述

SpringMVC技术与Servlet技术功能等同,均属于web层开发技术

SpringMVC是一种基于Java实现MVC模型的轻量级Web框架

优点:
使用简单,开发便捷(相比于Servlet)

灵活性强

SpringMVC是一种表现出框架技术

SpringMVC用于进行表现出功能开发

入门案例

1.使用SpringMVC技术需要先导入SpringMVC坐标与Servlet坐标

2.创建SpringMVC控制器类(等同于Servlet功能)

3.初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean

4.初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求

注解

入门案例工作流程分析

启动服务器初始化过程

1.服务器启动,执行ServletContainersInitConfig类,初始化web容器

2.执行createServletApplicationContext方法,创建了WebApplicationContext对象

3.加载SpringMvcConfig

4.执行@ComponentScan加载对应的bean

5.加载UserController,每个@RequestMapping的名称对应一个具体的方法

6.执行getServletMappings方法,定义所有的请求都通过SpringMVC

单次请求过程

1.发送请求localhost/save

2.web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理

3.解析请求路径/save

4.由/save匹配执行对应的方法save()

5.执行save()

6.检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方

Controller加载控制

因为功能不同,如何避免Spring错误的加载到SpringMVC的bean——加载Spring控制的bean的时候排除掉SpringMVC控制的bean

SpringMVC相关bean加载控制

SpringMVC加载的bean对应的包均在com.itheima.controller包内

Spring相关bean加载控制

方式一:Spring加载的bean设定扫描范围为com.itheima,排除掉controller包内的bean

方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等

方式三:不区分Spring与SpringMVC的环境,加载到同一个环境中

请求与响应

请求映射路径

名称:@RequestMapping

类型:方法注解 类注解

位置:SpringMVC控制器方法定义上方

作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀

范例:

属性 value(默认):请求访问路径,或访问路径前缀

SpringBoot

SpringBoot入门

SpringBoot入门程序

1.创建新模块,选择spring初始化,并配置模块相关基础信息

2.选择当前模块需要使用的技术集

3.开发控制器类

4.运行自动生成的Application类

最简SpringBoot程序所包含的基础文件

1.pom.xml

2.Application类

Spring程序与SpringBoot程序对比

基于idea开发SpringBoot程序需要确保联网且能够加载到程序框架结构

SpringBoot官网创建方式

1.进入官网,点击Quickstart Your Project

2.进行配置

3.添加依赖

4.生成zip压缩文件

SpringBoot项目快速启动

1.对SpringBoot项目打包(执行Maven构建指令package)

2.执行启动指令

注意事项:jar执行命令行启动需要依赖Maven插件支持,请确认打包时是否具有SpringBoot对应的Maven插件

SpringBoot简介

起步依赖

SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程

Spring程序缺点

配置繁琐

依赖设置繁琐

SpringBoot程序优点

自动配置

起步依赖(简化依赖配置)

辅助功能(内置服务器,......)

起步依赖

含start的为起步依赖

辅助功能之切换web服务器

辅助功能

SpringBoot程序启动

启动方式

SpringBoot在创建项目时,采用jar的打包方式

SpringBoot的引导类时项目的入口,运行main方法就可以启动项目

使用maven依赖管理变更起步依赖项

Jetty比Tomcat更轻量级,可扩展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty

基础配置

配置文件格式

修改服务器端口

SpringBoot提供了多种属性配置方式

1.application.properties

2.application.yml

3.application.yaml

自动提示功能消失解决方案

三种配置文件优先级

注意事项:

SpringBoot核心配置文件名为application

SpringBoot内置属性过度,且所有属性集中在一起修改,在使用时,通过提示键+关键字修改属性

yaml

yaml格式

yaml语法规则

yaml数组数据

数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔

yaml数据读取方式

使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名......}

封装全部数据到Environment对象

自定义对象封装指定数据

注意事项

自定义对象封装数据警告解决方案

添加依赖

多环境启动

多环节开发配置

多环境启动

propertie文件多环境启动

多环节命令行启动参数配置

带参数启动SpringBoot

参数加载优先级顺序

多环节开发兼容问题

Maven与SpringBoot多环境兼容

1.Maven中设置多环境属性

2.SpringBoot中引用Maven属性

3.执行Maven打包指令

Maven指令执行完毕后,生成了对应的包,其中类参与编译,但是配置文件并没有编译,而是复制到包中

解决思路:对于源码中非java类的操作要求加载Maven对应的属性,解析${}占位符

4.对资源文件开启对默认占位符的解析

Maven打包加载到属性,打包顺利通过

配置文件分类

配置文件分类

在SpringBoot中提供有多级配置文件

整合第三方技术

SpringBoot整合junit

Spring整合junit(复习)

SpringBoot整合junit

SpringBoot整合mybatis

SpringBoot整合SSM

Spring整合mybatis(复习)

1.SpringConfig

导入JdbcConfig

导入MyBatisConfig

2.JDBCConfig

定义数据源(加载properties配置项:driver、url、username、password)

3.MyBatisConfig

定义SqlSessionFactoryBean

定义映射配置

SpringBoot整合MyBatis

1.创建新模块,选择Spring初始化,并配置模块相关基础信息

2.选择当前模块需要使用的技术集(MyBatis、MySQL)

3.设置数据源参数

注意事项:

SpringBoot版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区

或在MySQL数据库端配置时区解决此问题

4.定义数据层接口与映射配置

5.测试类中注入dao接口,测试功能

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jmeter调试错误全集(入门必备)

一、前言 在使用jmeter做接口测试的过程中大家是不是经常会遇到很多问题,但是无从下手,不知道从哪里开始找起,对于初学者而言这是一个非常头痛的事情。这里结合笔者的经验,总结出以下方法。 二、通过查看运行日志调试问题 写好脚…

UE4/UE5 日志插件(基于spdlog)

1 解决问题 对于高频日志序列化到本地的需求,spdlog肯定完美满足。 源码地址:https://github.com/gabime/spdlog 博主下载的版本为 spdlog-1.12.0,各位大佬可以根绝自己爱好选择。 2 过程介绍 大概目录: SpdlogLibC目录下是对…

WGAN 优势小结

我在上一篇博文为什么 GAN 不好训练中,分析了原始 GAN 难以训练的原因,本篇博文将分析下 WGAN 的优势。 1. Wasserstein 距离 W 是指 Wasserstein,Wasserstein 距离又叫Earth-Mover(EM)距离。Wasserstein距离相比KL散…

2024年企业和个人都在备考的权威性 AI人工智能工程师培训类证书

给大家推荐个2024年企业和个人都在备考的权威性 AI人工智能工程师培训类证书,看能否帮到大家的: 由工业和信息化部电子工业标准化研究院颁发的关于以下两类证书: 计算机自然语言及语音处理设计开发工程师(中级) 计算机…

软件设计师——信息安全(二)

📑前言 本文主要是【信息安全】——软件设计师——信息安全的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1f304…

【无数次任意地址读+栈溢出】ImaginaryCTF2023 -- opportunity

前言 本题不难&#xff0c;但感觉笔者的做法挺有意思&#xff08;嘿嘿&#xff0c;自夸啦&#xff09;&#xff0c;利用到了最近学到的 ret2hbp。 漏洞分析 保护&#xff1a;smap 等都开了&#xff0c;标配啦 >_< 漏洞是直给的&#xff1a;这里存在一个 256 字节的任…

阅读代码的记录

1-utils_metrics.py用在train.py中做指标衡量&#xff0c;现在想在推理&#xff08;predict.py&#xff09;的时候衡量一下指标 2-调研眼睛部位的单独分割。 https://blog.csdn.net/qq_40234695/article/details/88633094 衡量图像语义分割准确率主要有三种方法&#xff1a; …

高级C#技术(二)

前言 本章为高级C#技术的第二节也是最后一节。前一节在下面这个链接 高级C#技术https://blog.csdn.net/qq_71897293/article/details/134930989?spm1001.2014.3001.5501 匿名类型 匿名类型如其名&#xff0c;匿名的没有指定变量的具体类型。 举个例子&#xff1a; 1 创建…

YOLOv8改进《目标对象计数》多任务实验:深度集成版来了!支持自定义数据集训练自定义模型

💡该教程为改进YOLO专栏,属于《芒果书》📚系列,包含大量的原创改进方式🚀 💡🚀🚀🚀内含改进源代码 按步骤操作运行改进后的代码即可💡更方便的统计更多实验数据,方便写作 YOLOv8改进《目标对象计数》多任务实验:深度集成版来了!支持自定义数据集训练自定…

匿名内部类与Lambda表达式

深入了解Java的匿名内部类 Java作为一种面向对象的编程语言&#xff0c;提供了许多灵活的特性&#xff0c;其中之一就是匿名内部类。匿名内部类是一种没有名字的局部内部类&#xff0c;通常用于创建只需在一个地方使用的类的实例。 什么是匿名内部类&#xff1f; 匿名内部类是…

学习Java第70天,过滤器Filter简介

过滤器概述 Filter,即过滤器,是JAVAEE技术规范之一,作用目标资源的请求进行过滤的一套技术规范,是Java Web项目中最为实用的技术之一 Filter接口定义了过滤器的开发规范,所有的过滤器都要实现该接口 Filter的工作位置是项目中所有目标资源之前,容器在创建HttpServletRequest和…

Unity2023.3(Unity6)版本开始将可以发布WebGPU

翻译一段官网上的话&#xff1a; 利用Unity 2023.3(正式发布时应该称为Unity6)中最新的WebGPU图形API集成&#xff0c;尝试最大限度的提升您的网络游戏的真实感。 通过与谷歌的战略合作&#xff0c;Unity实时3D平台的强大的图形功能现在为图形丰富的网络游戏进行微调&#xff0…

知识库SEO:提升网站内容质量与搜索引擎排名的策略

随着搜索引擎算法的不断更新和优化&#xff0c;单纯依靠关键词堆砌和外部链接的时代已经过去。现在的SEO&#xff08;搜索引擎优化&#xff09;已经转向了以提供高质量、有价值内容为核心的阶段。知识库SEO便是这个新阶段的重要策略之一。 | 一、知识库SEO的概念与意义 1.定义…

python 新手学习 - 简单实用的 Python 周期任务调度工具

如果你想周期性地执行某个 Python 脚本&#xff0c;最出名的选择应该是 Crontab 脚本&#xff0c;但是 Crontab 具有以下缺点&#xff1a; 1.不方便执行秒级任务。 2.当需要执行的定时任务有上百个的时候&#xff0c;Crontab 的管理就会特别不方便。 还有一个选择是 Celery&a…

text-align-last: justify 使用方法,对齐字段交互

<html> <style>.label {display: inline-block;width: 100px;text-align-last: justify;} </style><body><div class"l-content"><div><div class"label">身份证&#xff1a;</div><div class"la…

DDA 算法

CAD 算法是计算机辅助设计的算法&#xff0c;几何算法是解决几何问题的算法 CAD 算法是指在计算机辅助设计软件中使用的算法&#xff0c;用于实现各种设计和绘图功能&#xff0c;CAD 广泛应用于建筑、机械、电子等领域&#xff0c;可以大大提高设计效率和精度 绘图算法是 CAD…

RLC防孤岛负载测试:电力系统安全运行的重要保障

在电力系统中&#xff0c;孤岛效应是一个严重的问题&#xff0c;它可能导致电力系统的不稳定甚至崩溃。为了确保电力系统的安全运行&#xff0c;必须进行RLC防孤岛负载测试。RLC防孤岛负载测试是一种模拟电网故障后&#xff0c;对电力系统进行检测的方法&#xff0c;主要用于检…

性格内向,如何找到适合自己的职业

很多人都会觉得性格内向是一件坏事&#xff0c;这会让自己在竞争激烈的生活中得不到好处&#xff0c;但其实在心理学上看来&#xff0c;每一种性格都有自己的优缺点&#xff0c;如果片面地用好坏去评定&#xff0c;就无法发挥性格的优势&#xff0c;也很难利用它们为自己所用。…

LLM(六)| Gemini:谷歌Gemini Pro 开放API ,Gemini Pro 可免费使用

近期&#xff0c;Google Gemini Pro 开放API 了&#xff0c;且Gemini Pro 可免费使用&#xff01;Gemini Pro支持全球180个国家的38种语言&#xff0c;目前接受文本作为输入并生成文本作为输出。 Gemini API 地址&#xff1a;http://ai.google.dev Gemini Pro 的表现超越了其他…

Linux route命令详解

1、介绍 route命令用于显示和操作IP路由表&#xff0c;它允许用户查看当前系统的路由信息&#xff0c;添加新的路由、删除已有的路由等。 2、命令 2.1 命令选项 -n, --numeric&#xff1a;不解析主机名&#xff0c;直接显示IP地址。使用这个选项可以加快显示速度&#xff0…