一文掌握SpringBoot注解之@Component 知识文集(5)

在这里插入图片描述

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。
🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。
🎉欢迎 👍点赞✍评论⭐收藏

🔎 SpringBoot 领域知识 🔎

链接专栏
SpringBoot 专业知识学习一SpringBoot专栏
SpringBoot 专业知识学习二SpringBoot专栏
SpringBoot 专业知识学习三SpringBoot专栏
SpringBoot 专业知识学习四SpringBoot专栏
SpringBoot 专业知识学习五SpringBoot专栏
SpringBoot 专业知识学习六SpringBoot专栏
SpringBoot 专业知识学习七SpringBoot专栏
SpringBoot 专业知识学习八SpringBoot专栏
SpringBoot 专业知识学习九SpringBoot专栏
SpringBoot 专业知识学习十SpringBoot专栏
SpringBoot 专业知识学习十一SpringBoot专栏
SpringBoot 专业知识学习十二SpringBoot专栏
SpringBoot 专业知识学习十三SpringBoot专栏
SpringBoot 专业知识学习十四SpringBoot专栏
SpringBoot 专业知识学习十五SpringBoot专栏
SpringBoot 专业知识学习十六SpringBoot专栏
SpringBoot 专业知识学习十七SpringBoot专栏
SpringBoot 专业知识学习十八SpringBoot专栏
SpringBoot 专业知识学习十九SpringBoot专栏
SpringBoot 专业知识学习二十SpringBoot专栏

文章目录

    • 🔎 Java 注解 @Component 学习(5)
      • 🍁 41、在 Spring 中,如何通过 @Component 注解定义一个切入点(Pointcut)?
      • 🍁 42、@Component 注解的 autowireCandidate 属性的作用是什么?
      • 🍁 43、@Component 注解和 @Import 注解有什么关系?
      • 🍁 44、在 Spring 中,是否可以通过 @Component 注解注入一个原始类型的依赖?
      • 🍁 45、@Component 注解的 primary 属性的作用是什么?
      • 🍁 46、@Component 注解是否支持循环依赖?
      • 🍁 47、在 Spring 中,可以通过 @Component 注解实现动态代理吗?
      • 🍁 48、@Component 注解和 @Qualifier 注解的作用有何区别?
      • 🍁 49、在 Spring 中,是否可以通过 @Component 注解注入一个集合类型的依赖?
      • 🍁 50、@Component 注解的 initMethod 和 destroyMethod 属性的作用是什么?


🔎 Java 注解 @Component 学习(5)

在这里插入图片描述


🍁 41、在 Spring 中,如何通过 @Component 注解定义一个切入点(Pointcut)?

在 Spring 中,定义切入点(Pointcut)是通过 @Pointcut 注解来实现的。而 @Pointcut 注解通常与 @Aspect 注解一起使用,在切面(Aspect)类中定义切入点。

不过,可以通过 @Component 注解来定义一个切面(Aspect)类,并在该类中定义切入点。具体步骤如下:

1.在类上添加 @Component 注解,并使用 @Aspect 注解表示这个类是一个切面类。

@Aspect
@Component
public class MyAspect {
    //定义切入点和切面方法
}

2.在类中定义一个方法,并使用 @Pointcut 注解来定义切入点。该方法的访问修饰符可以是 publicprivate 等任意访问修饰符,方法体可以为空。

@Aspect
@Component
public class MyAspect {
    @Pointcut("execution(* com.example.somepackage.*.*(..))")
    private void myPointcut() {
        //空方法体,只是为了定义切入点名称
    }
}

在上述示例中,我们定义了名为 myPointcut 的切入点,它匹配所有 com.example.somepackage 包下的类的所有方法。


🍁 42、@Component 注解的 autowireCandidate 属性的作用是什么?

@Component 注解的 autowireCandidate 属性用于控制 Spring 容器在自动装配时,是否将该 Bean 定义作为自动装配的候选者。

默认情况下,所有标记了 @Component 注解的 Bean 都会作为自动装配的候选者,即如果有其他 Bean 中存在与该 Bean 的依赖类型匹配的 Bean,则该 Bean 将被自动装配。

autowireCandidate 属性可以控制 Bean 是否参与自动装配的候选者的筛选过程,它的取值类型是 boolean,默认值为 true

具体来讲,当 autowireCandidate 属性被设置为 false 时,该 Bean 将不会被自动装配的候选者,即如果有其他 Bean 中存在与该 Bean 的依赖类型匹配的 Bean,也不会自动装配该 Bean。

以下是示例代码:

@Component
public class MyBean {
    // ... 省略其他属性和方法

    @Autowired
    @Qualifier("anotherBean") // 使用 Qualifier 指定注入的 Bean 名称为 "anotherBean"
    @Value("${some.prop}") // 使用 Value 注入配置属性的值
    @NonNull // 使用 Lombok 提供的注解标注参数不能为空
    public MyBean(@NonNull AnotherBean anotherBean, @Value("${some.prop}") String propValue) {
        // ... 构造方法实现
    }

    // ... 省略其他属性和方法
}

在上述代码中,我们使用了 @Autowired 注解来标注构造方法的参数 anotherBean,这告诉 Spring 容器,需要自动装配一个与 AnotherBean 类型相同的 Bean,并使用名为 “anotherBean” 的 Bean。

此外,我们还使用了 @Value 注解来注入一个配置属性的值,并使用了 @NonNull 注解来保障参数的非空性。

需要注意的是,@Autowired 注解具有默认的 required 属性为 true,这意味着如果没有找到与该参数类型匹配的 Bean,或找到的 Bean 的实例数不等于 1,那么 Spring 将会抛出一个异常。如果希望避免出现这种情况,可以将 required 属性设置为 false


🍁 43、@Component 注解和 @Import 注解有什么关系?

@Component 注解和 @Import 注解是 Spring 中两个不同的注解,它们在功能上有一些不同,但也存在一定的关联。

  1. @Component 注解是 Spring 提供的一个通用的注解,用于将一个类标识为一个可管理的组件(Bean),让 Spring 容器自动扫描并将其实例化。@Component 注解通常与 @Autowired@Qualifier@Value 等注解配合使用,用于实现依赖注入、属性注入等功能。

  2. @Import 注解用于手动导入其他的配置类或配置组件(Bean)。通过 @Import 注解可以在配置类中引入其他的配置类,从而将其所定义的 Bean 纳入到当前应用上下文中。同时, @Import 注解可以与 @Configuration 注解一起使用,用于声明该类是一个配置类。

关于两者的关系,可以从以下两个方面来说明:

  • @Import 可以在配置类中引入使用了 @Component 注解的类,将其实例化为 Bean 并纳入到 Spring 容器中。通过这种方式,我们可以在配置类中集中管理所有的 @Component 注解标注的组件。

  • @Import 还可以在配置类中引入其他的配置类,通过组合和导入其他的配置类,我们可以更加灵活地管理和组织项目中的 Bean。

下面是一个示例,展示了 @Component@Import 的关系:

@Configuration
@Import({MyComponent1.class, MyComponent2.class, MyConfig.class})
public class AppConfig {
    // 配置类的定义
}

在上述示例中,AppConfig 是一个配置类,通过 @Import 注解导入了 MyComponent1MyComponent2MyConfig 这三个类。其中,MyComponent1MyComponent2 可能是使用了 @Component 注解的类,通过 @Import 注解将其纳入到应用上下文中,让 Spring 容器管理它们。


🍁 44、在 Spring 中,是否可以通过 @Component 注解注入一个原始类型的依赖?

在 Spring 中,是不支持通过 @Component 注解直接注入一个原始类型的依赖的,因为原始类型无法作为 Bean 注册到 Spring 容器中,Spring 只会将通过 @Component 注解标注的类作为 Bean 进行管理。

如果需要注入一个原始类型的依赖,可以考虑以下两种方式:

1.通过 @Value 注解注入原始类型的依赖

@Component
public class MyComponent {

    @Value("${myProp}") // 使用 @Value 注解注入原始类型的依赖
    private int myProp;

    // ...
}

在上述示例中,使用 @Value 注解注入了一个原始类型的依赖 myProp,它的值将从 Spring 环境中获取。

2.通过一个 @Configuration 类将原始类型的依赖注入为 Bean

@Configuration
public class MyAppConfig {

    @Bean
    public int myInt() {
        return 42; // 返回一个 int 类型的值
    }
}

在上述示例中,将一个原始类型的依赖 42 注入为一个 Spring Bean myInt,并通过一个 @Configuration 类将其声明为一个配置类,从而引入到 Spring 环境中。

需要注意的是,通过这种方式注入的原始类型依赖不会管理生命周期,因为它们不是标准的 Bean(没有通过 @Component 注解标注),无法交由 Spring 容器管理其生命周期。


🍁 45、@Component 注解的 primary 属性的作用是什么?

在 Spring 中,@Component 注解的 primary 属性用于指定一个 Bean 是否为首选(Primary)的候选者。

当存在多个同类型的 Bean 候选者时,Spring 默认会抛出一个 NoUniqueBeanDefinitionException 异常,表示无法确定要注入哪个 Bean。这种情况下,可以使用 @Primary 注解或 primary 属性来解决这个问题。

具体来说,primary 属性可以被用于 @Component@Service@Repository 等注解。

下面是一个示例:

@Component
@Primary
public class MyComponent1 implements MyInterface {
    // ...
}

@Component
public class MyComponent2 implements MyInterface {
    // ...
}

@Autowired
private MyInterface myInterface;

在上述示例中,有两个实现了 MyInterface 接口的 @Component 注解标注的类:MyComponent1MyComponent2。通过给 MyComponent1 添加 @Primary 注解,我们可以将其指定为首选的 Bean。这样,当进行依赖注入时,如果没有显式指定要注入的 Bean,Spring 将选择 MyComponent1 作为首选的候选者进行注入。

需要注意的是,如果存在多个首选的 Bean,那么与 @Primary 注解相比,primary 属性具有更高的优先级。


🍁 46、@Component 注解是否支持循环依赖?

Spring 框架默认支持通过 @Autowired 进行依赖注入时的循环依赖,但是对于 @Component 注解本身是否支持循环依赖是有一些限制的。

具体来说,在默认情况下,@Component 注解是支持循环依赖的,但是有以下几个限制:

  1. 循环依赖只支持通过构造函数进行依赖注入,不支持通过 Setter 方法进行依赖注入。

  2. 循环依赖需要剥离开发者手动进行处理,即开发者需要通过限制 Bean 的依赖链长度来避免循环依赖导致的死循环和栈溢出等问题。

  3. 循环依赖需要依赖于 Bean 的作用域,如果 Bean 是单例作用域,则可以通过使用 @Lazy 注解或通过使用 ObjectFactoryObjectProviderProvider 等方式进行解决。如果 Bean 是原型作用域,则可以通过使用 @Autowired 注解将依赖注入到方法参数中来解决。

需要注意的是,虽然 Spring 默认支持循环依赖,但是循环依赖会增加程序的复杂度和难度,应该尽量避免。在实际开发中,如果出现了循环依赖的情况,建议优先考虑调整依赖关系,使其不出现循环依赖。


🍁 47、在 Spring 中,可以通过 @Component 注解实现动态代理吗?

在 Spring 中,可以通过 @Component 注解结合其他相关注解,如 @Aspect@EnableAspectJAutoProxy,来实现动态代理。

首先,使用 @Component 注解将目标类(被代理的类)声明为一个 Spring Bean。在目标类的方法上,使用 @Before@After@Around 等注解来定义切面逻辑。同时,需要在配置类上使用 @EnableAspectJAutoProxy 注解启用自动代理功能。

下面是一个示例:

@Aspect
@Component
public class MyAspect {

    @Before("execution(* com.example.MyClass.myMethod(..))")
    public void beforeAdvice() {
        System.out.println("Before advice.");
    }
}

@Component
public class MyClass {

    public void myMethod() {
        System.out.println("myMethod");
    }
}

@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
    // 配置类
}

在上述示例中,MyAspect 类使用了 @Aspect@Component 注解,将其声明为一个切面和 Spring Bean。MyClass 类被标注为 @Component,也成为一个 Spring Bean。MyAspect 类中的 beforeAdvice 方法使用了 @Before 注解,表示在目标方法执行之前执行切面逻辑。

在配置类 AppConfig 上使用了 @EnableAspectJAutoProxy 注解,启用了基于 AspectJ 的自动代理功能。

当 Spring 在运行时扫描到这些注解时,会自动生成一个代理类,用于拦截被 @Aspect 注解标记的切面逻辑,并将其应用到目标类的方法上。

需要注意的是,动态代理是针对接口的,默认情况下 Spring 使用 JDK 动态代理来实现。如果目标类没有实现接口,则 Spring 将使用 CGLIB 动态代理。


🍁 48、@Component 注解和 @Qualifier 注解的作用有何区别?

@Component@Qualifier 是 Spring 框架中常用的注解,具有不同的作用和用途。

@Component 注解是用于定义一个 Bean 实例,被注解的类会被 Spring 容器扫描并创建成一个 Bean。通常,我们使用 @Component 注解来定义 Service、Repository、Controller 等组件类。

@Qualifier 注解是用于指定一个 Bean 实例的名称。当 Spring 容器中存在多个同类型的 Bean 实例时,通过 @Qualifier 注解可以指定使用哪一个 Bean 实例。通常,我们在使用 @Autowired 自动注入时,配合 @Qualifier 注解来指定注入的 Bean 实例。

例如:

@Component
@Qualifier("myService")
public class MyServiceImpl implements MyService {
    // ...
}

@Service
public class BusinessService {
    @Autowired
    @Qualifier("myService")
    private MyService myService;
    // ...
}

上面的例子中,我们定义了一个 MyServiceImpl 类,并使用 @Qualifier("myService") 注解指定了该 Bean 实例的名称为 “myService”。在 BusinessService 类中,我们使用 @Autowired@Qualifiter("myService") 注解将 myService Bean 自动注入到 myService 字段中。

需要注意的是,@Qualifier 注解只有在 Spring 容器中存在多个同类型的 Bean 实例时才有意义。如果只存在一个同类型的 Bean 实例,不需要使用 @Qualifier 注解。

注解作用使用场景
@Component定义一个 Bean 实例Service、Repository、Controller 等组件类
@Qualifier指定一个 Bean 实例的名称当容器中存在多个同类型的 Bean 实例时,用于指定使用哪一个 Bean 实例

简单来说,@Component 注解用于定义一个 Bean 实例,而 @Qualifier 注解用于指定一个 Bean 实例的名称,用于区分多个同类型的 Bean 实例。


🍁 49、在 Spring 中,是否可以通过 @Component 注解注入一个集合类型的依赖?

在 Spring 中可以通过 @Component 注解来注入一个集合类型的依赖。

Spring 支持将多个相同类型的 Bean 实例注入到一个集合类型的字段或参数中。可以使用 @Autowired 注解结合 @Qualifier 注解来完成这个过程。

下面是一个示例:

@Component
public class MyServiceImpl1 implements MyService {
    // ...
}

@Component
public class MyServiceImpl2 implements MyService {
    // ...
}

@Service
public class BusinessService {
    @Autowired
    private List<MyService> myServices;
    // ...
}

在上面的示例中,我们定义了两个实现了 MyService 接口的类 MyServiceImpl1MyServiceImpl2 并标记为 @Component 注解。接着,在 BusinessService 类中,我们使用 @Autowired 注解并将 List<MyService> 类型的字段 myServices 注入。

这样,Spring 会将所有实现了 MyService 接口的 Bean 实例注入到 myServices 字段中,并以集合的形式提供给我们使用。我们可以在 BusinessService 中遍历或使用集合中的元素。

需要注意的是,如果没有找到任何符合条件的 Bean 实例,集合类型的字段将会是空集合(而不是 null)。


🍁 50、@Component 注解的 initMethod 和 destroyMethod 属性的作用是什么?

@Component 注解的 initMethoddestroyMethod 属性用于指定在 Bean 初始化和销毁时执行的方法。

  • initMethod 属性:用于指定在 Bean 初始化完成后调用的方法。该方法可以进行一些初始化操作,例如数据加载、资源初始化等。需要注意的是,被指定的方法不能有任何参数,且返回类型为 void

  • destroyMethod 属性:用于指定在 Bean 销毁前调用的方法。该方法可以进行一些清理操作,例如资源释放、数据库连接关闭等。需要注意的是,被指定的方法不能有任何参数,且返回类型为 void

示例:

@Component(initMethod = "init", destroyMethod = "cleanup")
public class MyService {
    public void init() {
        // 初始化操作
    }

    public void cleanup() {
        // 清理操作
    }
}

在上面的示例中,我们使用 @Component 注解并通过 initMethoddestroyMethod 属性分别指定了 initcleanup 方法作为 Bean 的初始化方法和销毁方法。在 Spring 容器启动时,会先调用 init 方法进行初始化,当容器关闭时,会调用 cleanup 方法进行清理。

需要注意的是,initMethoddestroyMethod 属性只对 singleton 作用域的 Bean 起作用。对于 prototype 作用域的 Bean,则不会调用销毁方法。

另外,还可以使用 @PostConstruct@PreDestroy 注解来代替 initMethoddestroyMethod 属性,它们也具有相同的作用。

在这里插入图片描述

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

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

相关文章

操作系统(5)-----操作系统进程相关

目录 一.进程的组成 1.PCB&#xff08;进程控制块&#xff09; 2.程序段与数据段 二.进程的特征 三.进程的状态以及状态的转换 四.进程的组织 1.链接方式 2.索引方式 五.进程控制 六.进程控制相关原语 1.创建原语 2.撤销原语 3.阻塞原语 4.唤醒原语 5.切换原语 …

Spring MVC 请求流程

SpringMVC 请求流程 一、DispatcherServlet 是一个 Servlet二、Spring MVC 的完整请求流程 Spring MVC 框架是基于 Servlet 技术的。以请求为驱动&#xff0c;围绕 Servlet 设计的。Spring MVC 处理用户请求与访问一个 Servlet 是类似的&#xff0c;请求发送给 Servlet&#xf…

5G赋能智慧文旅:科技与文化的完美结合,打造无缝旅游体验,重塑旅游业的未来

一、5G技术&#xff1a;智慧文旅的强大引擎 5G技术的起源可以追溯到2010年&#xff0c;当时世界各国开始意识到4G技术已经达到了瓶颈&#xff0c;无法满足日益增长的移动通信需求。2013年&#xff0c;国际电信联盟&#xff08;ITU&#xff09;成立了5G技术研究组&#xff0c;开…

力扣516. 最长回文子序列

动态规划 思路&#xff1a; 字符串最长回文子序列问题可以转换为原字符串 s 和逆串 s 的最长公共子序列长度问题&#xff0c;具体推断过程可以参考 力扣1312. 让字符串成为回文串的最少插入次数问题变成了求两个字符串最长公共子序列长度问题&#xff0c;具体思路可以参考 力扣…

物联网协议Coap之C#基于Mozi的CoapClient调用解析

目录 前言 一、CoapClient相关类介绍 1、CoapClient类图 2、CoapClient的设计与实现 3、SendMessage解析 二、Client调用分析 1、创建CoapClient对象 2、实际发送请求 3、Server端请求响应 4、控制器寻址 总结 前言 在之前的博客内容中&#xff0c;关于在ASP.Net Co…

《向量数据库指南》——Milvus Cloud 2023 年关键数据

10 倍 - 内存节省 在 2023 年,RAG 模型被广泛认为是向量数据库的最主要应用之一。我们发现,在文档被分割成块之后,一个含有 500 个 Token 的 Chunk(通常 1000 字节)会转换成一个 1536 维的 float32 向量(通常 6000 字节),这意味着向量数据的体积可能会超过原始文档的…

Linux服务器配置与管理(第三次实验)

实验目的及具体要求 目的 1.熟悉Shell 脚本语法 2.掌握创建脚本的方法 3.掌握运行脚本的方法 4.掌握变量及表达式 5.掌握Shell 控制结构 6.掌握Shell 函数 任务 1.显示当前日期时间、执行路径、用户账户及所在的目录位置 2.判断一个文件是不是字符设备文件&#xff0…

Github 2024-01-28 开源项目日报Top10

根据Github Trendings的统计&#xff0c;今日(2024-01-28统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目3TypeScript项目2Rust项目1HTML项目1JavaScript项目1Cuda项目1C#项目1非开发语言项目1 Nuxt&#…

有手就行!阿里云上3分钟搞定幻兽帕鲁联机服务器搭建

幻兽帕鲁最近在社区呈现了爆火的趋势&#xff0c;在线人数已突破百万级别&#xff0c;官方服务器也开始出现不稳定&#xff0c;卡人闪退的情况。对于有一定财力的小伙伴&#xff0c;搭建一个私人服务器是一个最稳定而舒服的解决方案。 本文萝卜哥将讲解一下如何快速搭建 palwo…

Nginx解析漏洞(nginx_parsing_vulnerability)

目录 Nginx解析漏洞 环境搭建 复现 漏洞利用 Nginx解析漏洞 NGINX解析漏洞主要是由于NGINX配置文件以及PHP配置文件的错误配置导致的。这个漏洞与NGINX、PHP版本无关&#xff0c;属于用户配置不当造成的解析漏洞。具体来说&#xff0c;由于nginx.conf的配置导致nginx把…

【Java】Spring注解开发

一、Spring注解开发 1 注解开发定义Bean对象【重点】 目的&#xff1a;xml配置Bean对象有些繁琐&#xff0c;使用注解简化Bean对象的定义 问题导入 问题1&#xff1a;使用什么标签进行Spring注解包扫描&#xff1f; 问题2&#xff1a;Component注解和Controller、Service、R…

MQ面试题之Kafka

前言 前文介绍了消息队列相关知识&#xff0c;并未针对某个具体的产品&#xff0c;所以略显抽象。本人毕业到现在使用的都是公司内部产品&#xff0c;对于通用产品无实际经验&#xff0c;但是各种消息中间件大差不差&#xff0c;故而本次选择一个相对较熟悉的Kafka进行详细介绍…

应用机器学习的建议

一、决定下一步做什么 在你得到你的学习参数以后&#xff0c;如果你要将你的假设函数放到一组新的房屋样本上进行测试&#xff0c;假如说你在预测房价时产生了巨大的误差&#xff0c;你想改进这个算法&#xff0c;接下来应该怎么办&#xff1f;实际上你可以考虑先采用下面的几种…

深度强化学习(王树森)笔记03

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

STM正点mini-新建工程模板,GPIO及寄存器(介绍)

一.新建工程模板(基于固件库) 1.1库函数与寄存器的区别 这里的启动文件都是根据容量来进行区分的 对MDK而言即使include了&#xff0c;也不知道在哪里找头文件 STM32F10X_HD,USE_STDPERIPH_DRIVER 二.新建工程模板(基于寄存器) 上面的大部分配置与固件库的一样 具体可以看手…

【面试】测试开发面试题

帝王之气&#xff0c;定是你和万里江山&#xff0c;我都护得周全 文章目录 前言1. 网络原理get与post的区别TCP/IP各层是如何传输数据的IP头部包含哪些内容TCP头部为什么有浮动网络层协议1. 路由协议2. 路由信息3. OSPF与RIP的区别Cookie与Session&#xff0c;Token的区别http与…

Spring5系列学习文章分享---第五篇(事务概念+特性+案例+注解声明式事务管理+参数详解 )

目录 事务事务概念什么是事务事务四个特性&#xff08;ACID&#xff09; 搭建事务操作环境Spring 事务管理介绍注解声明式事务管理声明式事务管理参数配置XML 声明式事务管理事务操作&#xff08;完全注解声明式事务管理&#xff09;感谢阅读 开篇: 欢迎再次来到 Spring 5 学习…

Java笔记 --- 一、双列集合

一、双列集合 双列集合的特点 Map 创建Map对象时&#xff0c;要规定键和值的泛型 Map是一个接口&#xff0c;不能直接创建&#xff0c;要创建实例化对象 Map的遍历 通过键找值 先获取到键的对象&#xff0c;并放到一个单列集合中&#xff08;map.KeySet()方法&#xff09;…

【Git】项目管理笔记

文章目录 本地电脑初始化docker报错.gitignoregit loggit resetgit statusgit ls-filesgit rm -r -f --cached拉取仓库文件更新本地的项目报错处理! [rejected] master -> master (fetch first)gitgitee.com: Permission denied (publickey).error: remote origin already e…

NVIDIA Jetson Orin Nano 开发者套件 - 加速入门级边缘 AI 应用

系列文章目录 前言 一、将人工智能概念转化为现实 英伟达™&#xff08;NVIDIA&#xff09;Jetson Orin Nano 开发者套件为创建入门级人工智能机器人、智能无人机和智能相机设定了新标准。它还简化了开始使用 Jetson Orin Nano 系列模块的过程。紧凑的设计、大量的连接器和高达…