Spring如何更简单的读取和存储对象
作者:小浪学编程 发布时间:2023-09-30 00:32:14
前言
上篇博客我们介绍了如何创建一个spring项目,并且如何的存、取对象,介绍了相关方法,那么本篇博客将接着上篇博客的内容介绍如何更加简单的读取和存储对象。
🌃在 Spring 中想要更简单的存储和读取对象的核⼼是使⽤注解,也就是我们接下来要学习 Spring 中的相关注解,来存储和读取 Bean 对象。
一、存储Bean对象
1、之前我们存储Bean时,需要在spring-config中添加一行bean注册内容才行;如下图:
而现在我们需要一个简单的注解即可完成;
二、配置扫描路径
那么我们这里可以新建一个项目来演示,取名为spring-2;
1、首先依然是配置pom.xml文件,添加spring框架支持;
添加以下代码;
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.24</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.24</version>
</dependency>
</dependencies>
2、在resources 目录下新建一个文件,spring-config.xml;
添加以下配置代码;
<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">
<!-- 配置 Spring 扫描的根路径(此根路径下的所有 Spring 存对象的注解才能生效) -->
<content:component-scan base-package="com"></content:component-scan>
</beans>
注意注释里面的内容,base-package后面的路径要正确;
三、添加注解存储 Bean 对象
1、类注解:包含以下五种:@Controller(控制器)、@Service(服务)、@Repository(仓库)、@Component(组件)、@Configuration(配置)。
为什么需要五大类注解?
在线演示五大注解添加存储 Bean 对象;
一、Controller
首先在com包下面新建一个类,这里我取的名字是"UserController"。
2、UserController里面的代码;
package com;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
@Controller
public class UserController {
public void sayHi(){
System.out.println("hello UserController");
}
}
注意千万不要遗漏注解@Controller,否则会报错的;
3、在启动类App中将对象读取出来;
ApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
UserController userController = context.getBean(UserController.class);
userController.sayHi();
运行结果:
二、Service
同理,在com包下新建一个类,UserService;
UserService里代码;
package com;
import org.springframework.stereotype.Service;
@Service
public class UserService {
public void sayHi(){
System.out.println("hello UserService");
}
}
启动类App读取对象;
ApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
UserService userService = context.getBean(UserService.class);
userService.sayHi();
运行结果:
三、 Repository
com包下新建一个类,名为UserRepository;
UserRepository类中代码段:
package com;
import org.springframework.stereotype.Repository;
@Repository
public class UserRepository {
public void sayHi(){
System.out.println("hello UserRepository");
}
}
启动类App中代码段:
ApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
UserRepository userRepository = context.getBean(UserRepository.class);
userRepository.sayHi();
运行结果:
四、Configuration
在com包下新建类,名为UserConfiguration;
UserConfiguration类中代码段:
package com;
import org.springframework.context.annotation.Configuration;
@Configuration
public class UserConfiguration {
public void sayHi(){
System.out.println("hello UserConfiguration");
}
}
启动类App中代码段:
ApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
UserConfiguration userConfiguration = context.getBean(UserConfiguration.class);
userConfiguration.sayHi();
运行结果:
五、Component
在com包下新建类,名为UserCompenent;
package com;
import org.springframework.stereotype.Component;
@Component
public class UserComponent {
public void sayHi(){
System.out.println("hello UserComponent");
}
}
启动类App中对应代码:
ApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
UserComponent userComponent = context.getBean(UserComponent.class);
userComponent.sayHi();
运行结果:
五大类注解之间有什么关系?
想搞清楚这个问题我们可以去查看一下每个注解对应的源码,直接按住Ctrl+鼠标左键即可前往对应注解的源码;
1、比如我们这里先查看一下Controller的源码;
进来之后我们发现Controller的实现也用到了Component;
2、我们再查看一下Service的源码;
同样,进来之后我们发现Service的实现也用到了Component;
所以可得到以下结论: @Controller、@Service、@Repository、@Configuration 都是基于 @Component 实现的,所以@Component 可以认为是其他 4 个注解的父类。
四、Spring使用五大类注解生成beanName的问题
1、首先找到全局搜索框
2、点击之后输入beanname,找到红色箭头指向的类,双击打开;
3、打开后往下拉,找到红色框框中的方法,ctrl+鼠标左键查看源码;
4、可以看到beanname的命名规则;
🎑简单来说就是,类名中第一个字母为大写,第二个字母也为大写,那么beanname的名称就是返回"原类名",否则将首字母转换为小写作为beanname返回;
💡OK,今天的内容就到这里啦,下篇博客继续更新使用方法注解@Bean将对象更简单的存储到容器中!!
来源:https://blog.csdn.net/m0_62426532/article/details/130465331


猜你喜欢
- 亲爱的读者,在这篇文章中,我提供了一些c#编程的最佳实践。你是否在用户输入验证中使用异常处理机制?如果是,那么你就是那个把你的项目执行速度降
- 我们还是来讨论c++吧,这几年在c++里面玩代码自动生成技术,而预处理是不可避免,也是不可或缺的重要工具。虽然boost pp预处理库在宏的
- 对于换肤技术,相信伙伴们都见过一些大型app,到了某些节日或者活动,e.g. 双十一、双十二、春节等等,app的ICON还有内部的页面主题背
- DataSet 对象是支持 ADO.NET的断开式、分布式数据方案的核心对象 ,用途非常广泛.我们很多时候需要使用其中的数据,比如取得一个D
- 在实际的工作中直接使用反射的机会比较少,有印象的就是一次自己做的WinForms小工具的时候利用反射来动态获取窗体上的每个控件,并且为必要的
- Mybatis删除多个数据例如:删除数据库中sid=1和sid=2的数据操作步骤如下1.在实体类中创建一个LIst用于存放要删除的sid2.
- 1、获取视频缩略图有两个方法(1)通过内容提供器来获取(2)人为创建缩略图(1)缺点就是必须更新媒体库才能看到最新的视频的缩略图[java]
- 一、点名器需求:我有一个文件里面存储了班级同学的姓名,每一个姓名占一行,要求通过程序实现随机点名器实现步骤:创建字符缓冲输入流对象创建Arr
- 本文为大家分享一个非常简单但又很常用的控件,跑马灯状态的TextView。当要显示的文本长度太长,又不想换行时用它来显示文本,一来可以完全的
- 本文实例讲述了java实现一次性压缩多个文件到zip中的方法。分享给大家供大家参考,具体如下:1.需要引入包:import java.io.
- 一、堆排序1、什么是堆排序(1)堆排序:堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构
- 1,首先要安装OpenCvSharp,使用cv2的函数获取设备,并将图像转换到Bitmapusing OpenCvSharp;
- java超市管理系统 1.0(含源文件,后续会继续优化~)前言一个月零零散散的时间学习了java,通过这次“超市管理系统”的练习,希望可以给
- 加密解密exe算法可能AES加密解密算法别人已经实现过,也有一些关于如何操纵自定义资源的VC代码,我只是将它们进行了组合,运用到了一起,并运
- 前言首次通过右滑来返回到上一个页面的操作是在 IOS7上出现。到目前android应用上支持这种操作的依然不多。分析其主要原因应该是andr
- 【引用】迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心
- 一、swagge简介前后端分离:后端︰后端控制层,服务层,数据访问层【后端团队】前端:前端控制层,视图层【前端团队】前后端通过API进行交互
- 前言在上一篇文章中讲完了SpringMVC的大部分知识,此篇文章中主要讲解 * 。上一篇文章🚩 * 的使用是非常普遍的。例如在 OA系统中通
- 今天安装了jdk1.8、tomcat8、和maven3.5.2,弄好后在myeclipse新建了一个maven项目,项目默认是jdk1.5,
- 本文实例讲述了Java Swing实现简单的体重指数(BMI)计算器功能。分享给大家供大家参考,具体如下:BMI,Body Mass Ind