【Spring学习之更简单的读取和存储Bean对象】教会你使用五大类注解和方法注解去存储 Bean 对象

news2024/12/23 18:39:57

前言:
💞💞今天我们依然是学习Spring,这里我们会更加了解Spring的知识,知道Spring是怎么更加简单的读取和存储Bean对象的。也会让大家对Spring更加了解。
💟💟前路漫漫,希望大家坚持下去,不忘初心,成为一名优秀的程序员

个人主页⭐: 书生♡
gitee主页🙋‍♂:奋斗的小白
博客领域💥:java编程 ,前端,算法,强训题目
写作风格💞:超前知识点,干货,思路讲解,通俗易懂
支持博主💖:关注⭐,点赞、收藏⭐、留言💬

在这里插入图片描述

目录

  • 1.存储 Bean 对象
    • 1.1配置路径
    • 1.2 存储 Bean 对象的两种方式
    • 1.3 存储 Bean 对象-----类注解
      • 1.3.1 @Controller(控制器存储)
      • 1.3.2 @Service(服务存储)
      • 1.3.3 @Repository(仓库存储)
      • 1.3.4 @Component(组件存储)
      • 1.3.5 @Configuration(配置存储)
    • 1.4 存储 Bean 对象-----方法注解
      • 1.4.1 使用方法注解@Bean
      • 1.4.2 方法注解的重命名
    • 1. 5 Bean的命名
    • 1.6 类注解的具体讲解
      • 1.6.1 为什么要有五个类注解
      • 1.6.2 五大类注解的用途(重点)
      • 1.6.3类注解之间的关系

1.存储 Bean 对象

 上一篇文章,已经教会大家怎么去存储Bean对象了,但是会发现比较麻烦,所以这篇文章会教会大家怎么更加简单的去存储Bean对象。

在 Spring 中想要更简单的存储和读取对象的核⼼是使⽤注解,也就是我们接下来要学习 Spring 中的相 关注解,来存储和读取 Bean对象。

1.1配置路径

在上一篇文章中,我们存储 Bean 时,需要在 spring-config 中添加⼀⾏ bean 注册内容才⾏。
在这里插入图片描述
但是会发现当我们需要注入多个类的时候,就会添加很多的Bean标签,会很麻烦,那有什么可以解决吗?
我们可以使用一行代码就去解决这个问题。

在我们的spring-config.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:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <content:component-scan base-package="Spring.demo"></content:component-scan>
</beans>

有人就会问了,我不用包行不行,直接在根目录下创建一个类,是可以的,那么我们就需要这个位置不用写包的路径,写上两个**,就可以了,这个就代码扫描全部的。但是不建议这样写,因为我们以后再公司的时候,一定会有这样的路径的,所以建议大家在这里还是写在包的下面,更规范些。

1.2 存储 Bean 对象的两种方式

我们通过注解来存储对象在Spring中,有两种方式:

1.类注解:@Controller、@Service、@Repository、@Component、@Configuration。
2.方法注解:@Bean

下面为大家分别讲讲这两种方式。

1.3 存储 Bean 对象-----类注解

我们知道存储Bean对象有五种类注解。

@Controller 控制器
@Service 服务
@Repository 仓库
@Component 组件
@Configuration 配置

下面为大家分开说说这五种类注解。(重点是前三个)

1.3.1 @Controller(控制器存储)

我们在使用类注解的时候,类注解全部都是在类的上面的,因为我们是想将对象存储到 Spring 中,整个类就是一个对象,所以在类的上面。
在这里插入图片描述

使⽤ @Controller 存储 bean 的代码展示:

	@Controller//将对象存储到 Spring 中
	public class ApplicController {
	    
	    public  String hello()
	    {
	        return "Hello Spring !!!!";
	    }
	}


    public static void main(String[] args) {
        //1.获取Spring对象(上下文)
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");

        //2.取出bean对象

        //(3)根据Bean名称(标识)+类型 来得到Bean
        ApplicController applicController =context.getBean("applicController", ApplicController.class);

        //3.使用bean
        System.out.println(applicController.hello());
    }

在这里插入图片描述

1.3.2 @Service(服务存储)

这个和上面的一样,在类上面添加一个注解,@Service
在这里插入图片描述
使⽤ @Service 存储 bean 的代码展示:

@Service
public class ApplicController {

    public  String hello()
    {
        return "Hello Spring !!!!";
    }
}

其他的代码和上面的一样就不写了。这个也是可以运行成功的。
在这里插入图片描述

1.3.3 @Repository(仓库存储)

这个和上面的一样,在类上面添加一个注解,@Repository
在这里插入图片描述
使⽤ @Repository存储 bean 的代码展示:

@Repository
public class ApplicController {

    public  String hello()
    {
        return "Hello Spring !!!!";
    }
}

其他的代码和上面的一样就不写了。这个也是可以运行成功的。
在这里插入图片描述

1.3.4 @Component(组件存储)

这个和上面的一样,在类上面添加一个注解,@Component(这个用的比上面三个会少一些)
在这里插入图片描述
使⽤ @Component存储 bean 的代码展示:

@Component
public class ApplicController {

    public  String hello()
    {
        return "Hello Spring !!!!";
    }
}

其他的代码和上面的一样就不写了。这个也是可以运行成功的。

1.3.5 @Configuration(配置存储)

这个和上面的一样,在类上面添加一个注解,@Configuration(这个使用会更少一点)
在这里插入图片描述

使⽤ @Configuration存储 bean 的代码展示:

@Configuration
public class ApplicController {

    public  String hello()
    {
        return "Hello Spring !!!!";
    }
}

其他的代码和上面的一样就不写了。这个也是可以运行成功的。

1.4 存储 Bean 对象-----方法注解

在这里插入图片描述

1.4.1 使用方法注解@Bean

类注解是添加到某个类上的,⽽⽅法注解是放到某个⽅法上的。

那么为什么要引入方法呢?

1:因为一个类中可能会有很多个方法,但是我并不全部都需要引入到Spring,如果使用类注解,那么就是将整个类注入Spring中,耽误性能,所以使用方法注解,需要哪个方法就将那个方法注入
2.如果一个类中出现了两个同样的方法,那么实用类注解的时候,不知道去取一个,那么就需要使用方法注解的name属性去区分了。

@Controller
public class StudentBeans {
    @Bean
    public Student student1() {
        // 伪代码,构建对象
        Student stu = new Student();
        stu.setId(1);
        stu.setName("张三");
        stu.setAge(18);
        return stu;
    }
}

注意:
在 Spring 框架的设计中,⽅法注解 @Bean 要配合类注解才能将对象正常的存储到 Spring 容器中
如果单独使用方法注解,会报错的
在这里插入图片描述

1.4.2 方法注解的重命名

我们可以通过设置 name 属性给 Bean 对象进⾏重命名操作

格式为:
@Bean({“名称”})
这个重命名的 name 其实是⼀个数组,⼀个 bean 可以有多个名字,每一个名称用双引号括起来,用逗号分开。

注意事项:
当给@Bean设置了name属性之后,使用原方法名就不能获取到对象了,只能使用设置的名称才能获取。

在这里插入图片描述
此时我们使⽤我们自定义的名称就可以获取到 对象了

@Controller
public class StudentBeans {

    @Bean
    public Student student1() {
        // 伪代码,构建对象
        Student stu = new Student();
        stu.setId(1);
        stu.setName("张三");
        stu.setAge(18);
        return stu;
    }

    @Bean({"s1","s2"})
    public Student student2() {
        // 伪代码,构建对象
        Student stu = new Student();
        stu.setId(2);
        stu.setName("李四");
        stu.setAge(20);
        return stu;
    }

}

//另外一个启动类中
public static void main(String[] args) {

        //1.获取Spring对象(上下文)

        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
        //2.取出bean对象

        Student student =context.getBean("student1",Student.class);
        System.out.println(student);
        System.out.println("===========");
        Student stu =context.getBean("s1",Student.class);
        System.out.println(stu);
        System.out.println("===========");
        //Student stu1 =context.getBean("student2",Student.class);//这种是错误的
        //System.out.println(stu1);
    }

1. 5 Bean的命名

我们在spring-config.xml中引入了,这么一段代码,我们就可以不使用bean标签了,但是我们会发现没有了id这个属性了,那我们在获取Bean对象的时候怎么办,如果只使用类名的话就会出现问题。

在这里插入图片描述
其实当我们类名首字母是大写的是,默认将类名的首字母小写,就是我们的id标识了。
在这里插入图片描述

这个时候我们就会有几个疑问:

问题1.如果类名首字母是小写,要怎么从Spring中获取Bean?
答:和首字母是大写是一直的,都是用的是将类名首字母小写的方式来获取对象。

在这里插入图片描述

问题2:如果首字母和第二字母都是大写,会怎样?
答:当使用默认规则,首字母小写获取Bean对象时,失败了!
正确获取Bean的方式是使用原类名,就能成功获取到了。

在这里插入图片描述

问题3:项目中没有目录,所有的类都写在 java根路径下,怎么存、取 Bean对象?
答:我们只需要改一下配置文件的包路径就行,将路径改为**

在这里插入图片描述

1.6 类注解的具体讲解

1.6.1 为什么要有五个类注解

1.通过类注解可以了解当前类的用途(就好像看到一个东西就知道这是哪里的,具有很强的识别性)
2.功能有细微不同:这个在 Spring MVC/Spring Boot再详细展开。

1.6.2 五大类注解的用途(重点)

1.@Controller(控制器)∶归属于业务逻辑层,用来控制用户的行为,它用来检查用户参数的有效性。
2.@Service(服务):归属于服务层,调用类实现相应的功能。【不直接和数据库交互的,它类似于控制中心】
3.@Repository(仓库):归属于持久层,是直接和数据库进行交互的。通常每一个表都会对应一个@Repository。
4.@Configuration(配置)∶归属于配置层,是用来配置当前项目的一些信息。
5. @Component(组件):归属于公共工具类,提供某些公共方法。

在这里插入图片描述

1.6.3类注解之间的关系

先来看一下这五个类注解的源代码,可以发现每一个类注解都有一个@Componen,
这个就表明@Componen是他们的父类
在这里插入图片描述

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

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

相关文章

高能预警!融云WICC发布《社交泛娱乐出海作战地图》

最近圈子里风很大的《社交泛娱乐出海作战地图》, 必须说&#xff0c;真的有亿点点厉害&#xff01;这简直是一张集社交泛娱乐市场、品类知识和出海实战指南于一体的教材级地图&#xff0c;实感入手不亏。关注【融云全球互联网通信云】了解更多 首先&#xff0c;容我先秀一把实…

Definition of regularity in PDE theory

Regularity is one of the vague yet very useful terms to talk about a vast variety of results in a uniform way. Other examples of such words include “dynamics” in dynamical systems (I have never seen a real definition of this term but everyone uses it, an…

学习Vue 之 创建一个 Vue 应用

文章目录 Vue.js概述了解 Vue创建一个 Vue 应用参考 Vue.js 概述 计划学习前端&#xff0c;已有一些HTML&#xff0c;js&#xff0c;CSS的基础知识&#xff0c;下一步学习Vue.js。 以下是一些适合新手的Vue.js教程&#xff0c;你可以根据自己的实际情况和需求选择适合自己的…

独家揭秘:Kotlin编译器前端—解析阶段

独家揭秘&#xff1a;Kotlin编译器前端&#xff1a;解析阶段 Kotlin编译器对我来说就像一个黑盒子&#xff0c;虽然有关于Kotlin PSI在IDE插件中有使用的文档&#xff0c;但除了源代码中留下的注释之外&#xff0c;几乎没有其他信息可用。接下来的文章中我们来探索Kotlin编译器…

6. WebGPU 将图像导入纹理

我们在上一篇文章中介绍了有关使用纹理的一些基础知识。在本文中&#xff0c;我们将介绍从图像导入纹理。 在上一篇文章中&#xff0c;通过调用 device.createTexture 创建了一个纹理&#xff0c;然后通过调用 device.queue.writeTexture 将数据放入纹理中。 device.queue 上还…

Axure教程—穿梭框(中继器+动态面板)

本文将教大家如何用AXURE中动态面板和中继器制作穿梭框效果 一、效果 预览地址&#xff1a;https://8k99mh.axshare.com 下载地址&#xff1a;https://download.csdn.net/download/weixin_43516258/87897661?spm1001.2014.3001.5503 二、功能 在待选区域选项中可以选择一个选…

CURL获取与使用

背景&#xff1a;在日常工作中&#xff0c;经常会遇到需要获取CURL构造请求来进行问题定位&#xff0c;那如何获取及使用CURL则成为一个测试人员必备的技能&#xff1b; CURL是什么 CURL是一个命令行工具&#xff0c;开发人员使用它来与服务器进行数据交互。 如何获取完整 C…

Python开源自动化工具Playwright安装及介绍

目录 前言 1、Playwright介绍 2、Playwright安装 3、实操演示 4、小结 总结&#xff1a; 前言 微软开源了一个非常强大的自动化项目叫 playwright-python 它支持主流的浏览器&#xff0c;包含&#xff1a;Chrome、Firefox、Safari、Microsoft Edge 等&#xff0c;同时支…

简单使用Hystrix

使用Hystrix之前&#xff0c;需要先对SpringCloud有所了解&#xff0c;然后才会使用的顺畅&#xff0c;它是我们SpringCould的一种保护机制&#xff0c;非常好用。 下面直接开始 先导入Hystrix所需要的依赖 <!-- 引入openfiegn--> <dependency> <groupId>org…

Java学习笔记(视频:韩顺平老师)3.0

如果你喜欢这篇文章的话&#xff0c;请给作者点赞哟&#xff0c;你的支持是我不断前进的动力。 因为作者能力水平有限&#xff0c;欢迎各位大佬指导。 目录 如果你喜欢这篇文章的话&#xff0c;请给作者点赞哟&#xff0c;你的支持是我不断前进的动力。 算数运算符 号使用…

体验 TDengine 3.0 高性能的第一步,请学会控制建表策略

正如我们之前所言&#xff0c;在 3.0 当中&#xff0c;我们在产品底层做了很大的变化调整&#xff0c;除了架构更加科学高效以外&#xff0c;用户体验也是我们重点优化的方向。以之前一篇文章为例&#xff1a;对于 Update 功能&#xff0c;用户不再需要任何配置 &#xff0c;默…

社交泛娱乐出海如何抓住AIGC?我在融云WICC上看到了答案

大模型掀起的AIGC时代&#xff0c;所有企业的所有业务与产品都值得利用大模型技术重做一遍&#xff0c;接下来也将有越来越多依托AIGC技术的创新应用涌现。关注【融云全球互联网通信云】了解更多 在社交泛娱乐赛道&#xff0c;AI大模型技术也呈现出了加速落地的态势。日前&…

功能测试如何转型自动化测试

在互联网行业&#xff0c;我们是那些被遗忘的技术人。 很多人都觉得&#xff0c;传统开发、运维才是技术含量的一个工作。 但是测试的入门门槛比较低&#xff0c;所做的事情相对有限&#xff0c; 这是我之前跟一些大型互联网软件测试负责人大牛们聊天的时候发现&#xff0c;…

学网络安全常用的10大工具

从事网络安全工作&#xff0c;手上自然离不开一些重要的网络安全工具。今天&#xff0c;分享10大网络安全工具。 一、Kali Linux Kali 是一个基于 Debian 的 Linux 发行版。它的目标就是为了简单&#xff1a;在一个实用的工具包里尽可能多的包含渗透和审计工具。Kali 实现了这…

【JMeter】 二次开发插件开发 Dubbo 接口测试插件浅析

概述 在一些企业中&#xff0c;各类业务系统非常丰富&#xff0c;相互之间或对外提供很多的服务或接口 这些服务或接口中&#xff0c;有很多是需要强契约约束的&#xff0c;服务的提供方、服务的使用方必须遵守相同契约 这类服务最典型的就是RPC&#xff0c;其中应用广泛的有Du…

一文读懂,WAF阻止恶意攻击的8种方法

WAF&#xff08;Web 应用程序防火墙&#xff09;是应用程序和互联网流量之间的第一道防线&#xff0c;它监视和过滤 Internet 流量以阻止不良流量和恶意请求&#xff0c;WAF 是确保 Web 服务的可用性和完整性的重要安全解决方案。 它通过充当保护 Web 应用程序服务器免受恶意客…

属性和方法

类的属性 变量&#xff1a;1&#xff0c;按照数据类型来分基本数据类型&#xff0c;引用数据类型 2&#xff0c;按照变量在类中声明的位置不同&#xff1a;成员变量&#xff08;属性&#xff09;、局部属性&#xff08;方法内&#xff0c;构造器内&#xff0c;代码块内等&…

android 如何分析应用的内存(六)

android 如何分析应用的内存&#xff08;六&#xff09; 接上文&#xff0c;本系列文章&#xff0c;最重要的部分——————对native堆内存的分析&#xff0c;即将上演 分成六大板块&#xff1a; 手动实现&#xff0c;new和delete&#xff0c;以及malloc和freee&#xff0…

LVS+Keepalived负载均衡高可用群集(往事清零,万事顺意)

一、Keepalived高可用详解 1.应用场景 在企业应用中&#xff0c;单台服务器承担应用存在单点故障的危险。单点故障一旦发生&#xff0c;企业服务将发生中断&#xff0c;造成极大的危害。所以需要群集实现高可用性&#xff0c;保证服务稳定。 2.介绍和原理简介 Keepalived是…

【JAVA开发环境配置】 卸载JDK很简单, 一分钟帮你搞定!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…