Spring更加简单的读取和存储对象

前言:在上篇文章中,小编写了一个Spring的创建和使用的相关博客:Spring的创建和使用-CSDN博客,但是,操作/思路比较麻烦,那么本文主要带领大家走进:Spring更加简单的读取和存储对象!

本文主要讲解用注解来实现Spring更加简单的读取和存储对象:五大类注解

  • @Controller:控制器,验证用户请求的数据正确性(安保系统)
  • @Service:服务,编排和调度具体执行方法的(客服中心)
  • @Repository:持久层,和数据库交互(执行者)
  • @Component:组件(工具类)
  • @Configuration:配置项(项目中的一些配置)

前置工作:配置扫描路径(重要)

注意:想要将对象成功的存储到Spring中,我们需要配置一下存储对象的扫描包路径,只有被配置的包下所有类,添加了注解,才能被正确的识别并保存到Spring中!

在spring-config.xml文件中添加如下配置

       <conent:component-scan base-package="com.java.demo"></conent:component-scan>

因此,在上述代码的基础上,要求:五大类注解必须在component-scan包下。但是,即使在component-scan下,如果没有五大类注解,一样是不能将当前对象存储到spring中的,在component-scan下的所有子包下的类,只要加了五大类注解,同样能存储到spring中!!

当我们查看五大类源码以后,可知:

可以认为:@Controller/@Service/@Repository/@Configuration都是@Component“子类”,都是针对于@Component的“一个扩展!!

那么,为什么需要有五大类注解??仅需要一个@Component不就啥事都解决了吗??

其实,五大类注解的本质目的:让程序员看到注解之后,知道当前的类的作用!!

有了这个问题,我们就不得不谈:JavaEE标准分层了:

在JavaEE标准分层中(至少分3层):

  1. 控制层
  2. 服务层
  3. 数据持久层

Bean命名规则

默认情况下是首字母小写,如果类名第一个字母和第二个字母都为小写的情况下,Bean名称为原类名。

使用方法注解@Bean存储对象到Spring中(要求:使用该方法注解@Bean的方法,一定要有返回值)

注意事项

  1. @Bean命名规则和五大类注解的命名规则不同

    @Bean命名规则,默认情况下,@Bean存储的对象的名称=方法名

    User user=context.getBean("user1",User.class);

  2. @Bean注解必须要配合五大类注解一起使用(处于Spring性能设计所规定的策略)

    创建User对象:

    package com.spring.demo;public class User {private Integer uid;private String username;private String password;private Integer age;public Integer getUid() {return uid;}public void setUid(Integer uid) {this.uid = uid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
    }
    

    将User对象放入Spring容器中:

    package com.spring.demo;import org.springframework.context.annotation.Bean;
    import org.springframework.stereotype.Component;@Component
    public class UserBeans {@Beanpublic User user1(){User user=new User();user.setUid(1);user.setUsername("张三");user.setPassword("123456");user.setAge(18);return user;}
    }
    

    那么,从Spring容器中获取User对象:

    package com.spring.demo;import org.springframework.context.ApplicationContext;public class App {public static void main(String[] args) {//得到Spring 容器ApplicationContext context= new ClassPathXmlApplicationContext("spring.config.xml");User usr=context.getBeen("user1",User.class);System.out.println(usr.getUsername());}
    }
    

    当然,对于上述的@Bean可以进行重命名

    @Bean(value = {"user1","u1"})
    @Bean(name = {"user1","u1"})
    

    当你给@Bean进行重命名以后,此时只能只要重命名的名字,才可以获得对象,默认使用方法名获取对象的方式就不能用了!!

    Spring容器中允许将同一个类型的对象,存储到容器多个(多份)

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

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

相关文章

SAP MIRO 参考字段XBLNR 数电发票20位问题

参考字段XBLNR只能个支持16位&#xff0c;没有办法支持20位的数电发票号码。只能增强了。 目前还是无解&#xff01;觉得SAP还是不太重视中国的用户&#xff01; Do you need to extend RBKP-XBLNR to handle more characters? You’re not alone. | SAP Blogs 2580037 - M…

1300*C. Social Distance(贪心构造)

Problem - 1367C - Codeforces 解析&#xff1a; 统计出所有连续0序列&#xff0c;并且记录其左右两侧有没有1&#xff0c;然后对于四种情况分别判断即可。 #include<bits/stdc.h> using namespace std; int t,n,k; signed main(){scanf("%d",&t);while(…

Oracel增加IP白名单限制

F:\Java\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\sqlnet.ora 修改sqlnet.ora文件增加两行 # like12 add,20231025,IP白名单限制 TCP.VALIDNODE_CHECKINGyes TCP.INVITED_NODES(WIN-I4HJRGH080V,127.0.0.1,xxx.xxx.xxx.xxx) 注意&#xff1a;需要将计算机名hostname添…

笔记软件Notability mac中文版软件功能

Notability mac是一款帮助用户备注文件的得力工具&#xff0c;Notability Mac版可用于注释文稿、草拟想法、录制演讲、记录备注等。它将键入、手写、录音和照片结合在一起&#xff0c;便于您根据需要创建相应的备注。 Mac Notability mac中文版软件功能 将手写&#xff0c;照片…

VHDL if ( x =(x‘range => ‘0‘))

VHDL if ( x (x’range > ‘0’)) VHDL中遇到VHDL if ( x (x’range > ‘0’))这种语法&#xff0c;之前也遇到过&#xff0c;当时弄明白了&#xff0c;现在过了一段时间又忘记了&#xff0c;好记性不如烂笔头&#xff0c;还是要及时做笔记哟。 这句话的意思是如果x只包…

优先队列PriorityQueue

前言 PriorityQueue这个队列不知道大家使用过吗&#xff0c;反正我用的很少&#xff0c;主要对它不是很了解&#xff0c;今天我带领大家剖析下PriorityQueue这个优先级队列。 PriorityQueue介绍 顾名思义&#xff0c;PriorityQueue是优先队列的意思。优先队列的作用是能保证每…

基于UDP/TCP的网络通信编程实现

小王学习录 今日鸡汤Socket套接字基于UDP来实现一个网络通信程序DatagramSocket类DatagramPacket类基于UDP的服务器端代码基于UDP的客户端代码基于TCP来实现一个网络通信程序ServerSocket类Socket类基于TCP的服务器端代码基于TCP的客户端代码优化之后的服务器端代码补充TCP长短…

memcmp内存比较函数

1.头文件&#xff1a;string.h 2.函数原型&#xff1a;int memcmp(const void *ptr1, const void *ptr2, size_t num) 3.函数功能&#xff1a;比较两块内存中数据的大小 4.参数解释&#xff1a; 比较 ptr1 和 ptr2 两个指针所指向的两块内存中的前 num 个字节 5.返回值&am…

钡铼技术 工控机中的X86和ARM处理器:哪个更具可扩展性?

X86和ARM是两种不同的处理器架构&#xff0c;它们在工控机中的应用也有所不同。 X86架构的处理器是英特尔公司和AMD公司生产的&#xff0c;它们主要应用于个人电脑和服务器等领域。X86架构的处理器具有良好的通用性和兼容性&#xff0c;可以运行各种操作系统和应用软件。X86架…

做外贸的你是不是也怕遇到麻烦的客户

最近遇到两个客户&#xff0c;可以说还未开始真正的沟通&#xff0c;就已经心里开始打怵&#xff0c;打怵的原因也无非是各种理由上的不匹配。 当我们觉得一件事情不可能做成的时候&#xff0c;那么不能做成的原因就会不断的涌现出来&#xff0c;进而会让我们自己在谈判的时候…

堆栈与队列算法-以链表来实现堆栈

目录 堆栈与队列算法-以链表来实现堆栈 C代码 堆栈与队列算法-以链表来实现堆栈 虽然以数组结构来制作堆栈的好处是制作与设计的算法都相当简单&#xff0c;但若堆栈本身是变动的话&#xff0c;则数组大小无法事先规划声明。这时往往必须考虑使用最大可能性的数组空间&#…

Django 社区志愿者管理系统

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 社区志愿者服务管理系统&#xff0c;主要的模块包括查看首页、个人中心、通知公告管理、志愿者管理、普通管理员管理、志愿活动管理、活动宣…

钢琴培训答题服务预约小程序的效果怎样

很多家长都会从小培养孩子的兴趣&#xff0c;钢琴便是其中热度较高的一种&#xff0c;而各城市也不乏线下教育培训机构&#xff0c;除了青少年也有成年人参加培训&#xff0c;市场教育高需求下&#xff0c;需要商家不断拓展客户和转化。 那么通过【雨科】平台制作钢琴培训服务…

中国卖家的出路:TikTok电商重塑东南亚市场

2023年10月4日&#xff0c;印尼政府发布了一则重要公告&#xff0c;宣布不再允许社交媒体作为商品销售平台。这一决策直接影响了TikTok在印尼的电商业务&#xff0c;迫使该平台关闭了其印尼市场的电商运营。 对于TikTok电商而言&#xff0c;印尼市场一直占据着重要地位&#x…

【常见NodeJS基础面试题和答案(代码已验证)】

文章目录 常见NodeJS基础面试题和答案**1、你了解 Node. js吗&#xff1f;****2、Node. js的使用场景是什么&#xff1f;****3、为什么要用 Node. js&#xff1f;****4、Node. js有哪些全局对象&#xff1f;****5、process有哪些常用方法&#xff1f;****6、console有哪些常用方…

最短路径:迪杰斯特拉算法

简介 英文名Dijkstra 作用&#xff1a;找到路中指定起点到指定终点的带权最短路径 核心步骤 1&#xff09;确定起点&#xff0c;终点 2&#xff09;从未走过的点中选取从起点到权值最小点作为中心点 3&#xff09;如果满足 起点到中心点权值 中心点到指定其他点的权值 < 起…

[论文阅读]Ghost-free High Dynamic Range Imaging with Context-aware Transformer

多帧高动态范围成像&#xff08;High Dynamic Range Imaging, HDRI/HDR&#xff09;旨在通过合并多幅不同曝光程度下的低动态范围图像&#xff0c;生成具有更宽动态范围和更逼真细节的图像。如果这些低动态范围图像完全对齐&#xff0c;则可以很好地融合为HDR图像&#xff0c;但…

RTMP直播在虚拟数字人场景使用

虚拟数字人&#xff08;Virtual Digital Human&#xff09;&#xff0c;指的是一种基于数字技术创建的虚拟人物&#xff0c;他们有自己的外貌、声音&#xff0c;甚至是性格。虚拟数字人通常是通过计算机图形学、人工智能和其他先进技术来实现的。人们可以与这些虚拟数字人进行交…

Xamarin.Forms更改AndroidManifest.xml导致错误:没有兼容的代码在线程上运行

想在APP中加一个打开摄像头的功能&#xff0c;按照该博主的方法&#xff1a;https://blog.csdn.net/zhenweied09/article/details/82287761 设置好后&#xff0c;再运行就出现上图的错误&#xff0c;于是查找原因&#xff0c;定位到是更改AndroidManifest.xml文件导致的&#…

QMI8658A_QMC5883L(9轴)-EVB 评估板

1. 描述 QMI8658A_QMC5883L(9轴)-EVB 评估板是一款功能强大的9轴IMU传感器&#xff0c;它利用了QMA8658A 内置的3轴加速度计和3轴陀螺仪&#xff0c;同时结合QMC5883L的3轴地磁数据&#xff0c;来测量物体在三维空间中的角速度和加速度&#xff08;严格意义上的IMU只为用户提供…