【Spring】创建一个Spring项目与Bean对象的存储

目录

一、创建Spring项目

1、创建Maven项目

 2、配置maven国内源

 3、引入spring依赖

4、添加启动类

二、将Bean对象存储到Spring(IoC容器)

1、创建Bean对象

2、将Bean存储到spring(容器)中

3、获取Bean对象

3.1、ApplicationContext与BeanFactory的区别

3.2、getBean方法的更多用法(参数不同,用法不同) 

 4、总结


一、创建Spring项目

1、创建Maven项目

因为Spring项目是基于Maven的。这里小编使用的idea是社区版2021.3.2,使用的JDK是1.8。

 

 2、配置maven国内源

1️⃣配置当前项目的maven国内源

 

 找到setting.xml文件之后,添加maven国内阿里源

 如果你的电脑上已经存在settings.xml文件,你只需要将这个mirror添加到settings.xml文件中的mirrors标签中即可。

<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>        
</mirror>

2️⃣配置新项目的maven国内源

因为上述中已经在setting.mxl中添加了mirror,所以这里就直接勾选就可以,不用再配置settings.xml文件,通过这种方式配置了maven之后,之后创建了新的maven之后,就需要再配置了。

 


 3、引入spring依赖

在项目的pom.xml中添加Spring框架的支持,添加spring-context(spring上下文)和spring-beans(管理对象模块)。

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.3.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.2.3.RELEASE</version></dependency></dependencies>

添加完成之后,出现了爆红,表示这些文件没有下载,点击左边的Maven之后,点击刷新。或者也可以直接点击刷新,在第一次添加依赖时,idea的左上角会出现一个小标签,点击刷新即可触发下载。

 

 


4、添加启动类

最后在创建好的Java文件下创建一个启动类,包含main方法即可。

public class App {public static void main(String[] args) {}
}

二、将Bean对象存储到Spring(IoC容器)

1、创建Bean对象

比如我们创建一个UserService类,然后注入到spring中。这里所谓的Bean就是Java语言中的一个普通的类,一点点区别就是可能会被多次使用的对象叫做Bean

package com.zf.demo;public class UserService {public void func(){System.out.println("hello UserService.");}
}

2、将Bean存储到spring(容器)中

这里首先需要在resource中创建一个spring-config.xml配置文件。

 配置内容如下:

<?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"></beans>

然后Bean对象通过spring-config配置文件,注入到spring中,就是在配置文件中加入下面的一行代码。

<bean id="user" class="com.zf.demo.UserService"></bean>

这里id表示存储到容器中bean对象的名称,class表示的bean对象的路径(包名+类名)。这里只是进行了申明并没有真正的注入到spring中,只有使用到这个对象中的方法时,才会真正的被注入到spring中。


3、获取Bean对象

获取并使用Bean对象,首先我们需要得到spring上下文对象,因为对象都交给了spring管理,所以获取对象要从spring中获取,然后通过spring上下文,获取某个指定的Bean对象,然后使用

1️⃣使用ApplicationContext接口来获取spring上下文对象

这里需要使用ApplicationContext接口的实现类ClassPathXmlApplicationContext,并且需要指定配置文件,也就是我们刚刚创建的spring-config.xml文件。

import com.zf.demo.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {public static void main(String[] args) {//1、先得到Spring上下文对象(得到容器对象)ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");//2、得到Bean,这里使用依赖查找的方法UserService userService = (UserService) context.getBean("user");//3、使用Bean对象(非必须)userService.func();}
}

这里使用getBean方法进行依赖查找,这里方法中使用的参数需要和我们在spring-config.xml文件中id属性值相同。

2️⃣使用BeanFactory接口来获取上下文对象。

import com.zf.demo.Student;
import com.zf.demo.UserService;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;public class App2 {public static void main(String[] args) {//1、得到Spring 上下文对象(得到容器对象)BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));//2、获取BeanUserService userService = (UserService) context.getBean("user");//3、使用BeanuserService.func();}
}

这个方式在实际中并不推荐使用,这个方式随着时代的发展已经过时了,之前由于电脑内存较小的情况下,需要考虑内存占用的问题,而现在并不需要考虑这些。

3.1、ApplicationContext与BeanFactory的区别

🍂相同点

  • 都是容器管理对象,都可以获取Bean对象。

🍂不同点

  • ApplicationContext属于BeanFactory的子类,BeanFactory提供了基础的访问容器的能力,而ApplicationContext不仅继承了BeanFactory的所有功能之外,它还拥有独有的特性,添加了对国际化的支持,资源访问支持,以及时间传播等方面的支持。
  • 他们的加载机制不同:BeanFactory是按需加载Bean,属于懒加载,使用它程序启动的时候非常快,但是需要获取Bean对象时就会慢一些;而ApplicationContext在启动的时候,会将所有的Bean对象加载完成,所以启动会较慢,但是获取对象的时候就非常快的。

✨ 这里我们通过两个Bean对象来了解他们启动时的加载机制。

1️⃣在创建一个student类,并且给两个类中都写一个构造方法其中写一个打印的方法,可以观察启动时对象有没有加载。

package com.zf.demo;public class UserService {public UserService(){System.out.println("hello UserService Init.");}public void func(){System.out.println("hello UserService.");}
}
package com.zf.demo;public class Student {public Student(){System.out.println("Student Init.");}
}

2️⃣然后将新创建的类,注入到spring中,也就是在spring-config.xml文件中配置bean.

3️⃣然后启动App类(使用ApplicationContext来获取上下问对象),App2类(使用BeanFactory来获取上下问对象)

 


3.2、getBean方法的更多用法(参数不同,用法不同) 

1️⃣用法1:根据对象的名称来获取Bean对象

UserService userService = (UserService) context.getBean("User");

2️⃣用法2:根据类型获取Bean对象

  UserService userService = context.getBean(UserService.class);

 使用这种方式获取Bean对象,当Beans中只有一个类的实例是没有问题的,但是当有这个类的多个实例,就会产生问题。

通过上述方式来获取Bean对象 ,这里就报NoUniqueBeanDefinitionException异常,表示注入的对象不是唯一的。

3️⃣方式3:根据名称和类型来获取Bean对象

UserService userService = context.getBean("user",UserService.class);

这种获取Bean对象的方式,相比于第一种更加优雅,不需要使用强制类型转换。相比于第二种也不会出现方式2中的问题。

 4、总结

1️⃣首先是创建spring项目

2️⃣存对象

  • 创建普通类
  • 然后将普通类配置到spring-config.xml文件中,也就是注入到spring容器中

3️⃣取对象

  • 得到spring上下文,并读取spring的配置文件
  • 获取某个Bean对象
  • 使用Bean对象

img

 

 

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

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

相关文章

黑马机器学习day1

1.sklearn数据集 sklearn.datasets datasets.load_*() 获取小规模的数据集 datasets.fetch_*(data_homeNone) 获取大规模数据集 函数的第一个参数是data_home,标识数据集下载目录&#xff0c;默认/scikit_learn_data/ 1.1sklearn小数据集 sklearn.da…

3dmax好用插件CG Magic专业版上线,批量渲染,智能优化

CG Magic是一款基于3ds Max深度开发的智能化辅助插件&#xff0c;上千项实用功能&#xff0c;降低渲染时长&#xff0c;节省时间和精力&#xff0c;最大程度简化工作流程&#xff0c;助力高效完成创作。 CG MAGIC是基于3ds Max深度开发的智能化辅助设计插件&#xff0c;目前有两…

JavaWeb 速通Cookie

目录 一、关于base标签 1.引入 : 2.介绍 : 3.实例 : 4.细节 : 二、Cookie的引入 1.会话技术 : 1 什么是会话技术&#xff1f; 2 会话技术用于解决什么问题&#xff1f; 2.Cookie介绍 1 Cookie有什么用&#xff1f; 2 Cookie通讯机制 三、Cookie的基本使用 1.创建Cookie…

Pandas 的Merge函数详解

在日常工作中&#xff0c;我们可能会从多个数据集中获取数据&#xff0c;并且希望合并两个或多个不同的数据集。这时就可以使用Pandas包中的Merge函数。在本文中&#xff0c;我们将介绍用于合并数据的三个函数 merge、 merge_ordered、 merge_asofmerge merge函数是Pandas中…

如何实现对主机的立体监控?

主机监控是保证系统稳定性和性能的重要环节之一&#xff0c;那应该如何实现对主机的立体监控&#xff1f; 本期EasyOps产品使用最佳实践&#xff0c;我们将为您揭晓&#xff1a; 主机应该如何分组和管理&#xff1f; 主机监控应该关注哪些关键性指标&#xff1f; 背 景 通…

MySQL建表和增添改查

1.创建一个名为mydb的数据库 mysql> show database mydb; 查询 mysql> show database mydb; 2.创建一个学生信息表 mysql> create table mydb.student_informtion( -> student_id int UNSIGNED NOT NULL PRIMARY KEY, //非空&#xff08;不允许为空&#xff0…

FastAPI(七)应用配置

目录 一、在apps下新建文件夹config 二、新建配置文件app_conf.py 一、在apps下新建文件夹config 二、新建配置文件app_conf.py from functools import lru_cachefrom pydantic.v1 import BaseSettingsclass AppConfig(BaseSettings):app_name: str "Windows10 插件&qu…

WGS_1984_UTM、WGS_1984_Mercator坐标转化为经纬度坐标python

1、遥感影像的PROJECTION有哪些 遥感影像常见的投影类型有很多&#xff0c;具体选择哪种投影方式取决于数据的特性和使用需求。以下列举了一些常见的遥感影像投影类型&#xff1a; UTM (Universal Transverse Mercator) 投影&#xff1a;最常见的投影类型之一&#xff0c;将地…

uboot详解

uboot入口 在PC机上引导程序一般由BIOS开始执行&#xff0c;然后读取硬盘中位于MBR(Main Boot Record&#xff0c;主引导记录)中的Bootloader(例如LILO或GRUB),并进一步引导操作系统的启动。然而在嵌入式系统中通常没有像BIOS那样的固件程序&#xff0c;因此整个系统的加载启动…

Unity之ShaderGraph 节点介绍 UV节点

UV节点 Flipbook&#xff08;翻页或纹理帧动画&#xff09; Polar Coordinates&#xff08;将输入 UV 的值转换为极坐标。&#xff09; Radial Shear&#xff08;径向剪切变形&#xff09; Rotate&#xff08;将UV 的值旋转&#xff09; Spherize&#xff08;鱼眼镜头的球形变…

Spring系列三:基于注解配置bean

文章目录 &#x1f497;通过注解配置bean&#x1f35d;基本介绍&#x1f35d;快速入门&#x1f35d;注意事项和细节 &#x1f497;自己实现Spring注解配置Bean机制&#x1f35d;需求说明&#x1f35d;思路分析&#x1f35d;注意事项和细节 &#x1f497;自动装配 Autowired&…

【基于IDEA + Spark 3.4.1 + sbt 1.9.3 + Spark MLlib 构建逻辑回归鸢尾花分类预测模型】

逻辑回归进行鸢尾花分类的案例 背景说明&#xff1a; 基于IDEA Spark 3.4.1 sbt 1.9.3 Spark MLlib 构建逻辑回归鸢尾花分类预测模型&#xff0c;这是一个分类模型案例&#xff0c;通过该案例&#xff0c;可以快速了解Spark MLlib分类预测模型的使用方法。 依赖 ThisBui…

maven 删除下载失败的包

本文介绍了当Maven包报红时&#xff0c;使用删除相关文件的方法来解决该问题。文章详细说明了_remote.repositories、.lastUpdated和_maven.repositories文件的作用&#xff0c;以及如何使用命令行删除这些文件。这些方法可以帮助开发者解决Maven包报红的问题&#xff0c;确保项…

Linux 中利用设备树学习Ⅳ

系列文章目录 第一章 Linux 中内核与驱动程序 第二章 Linux 设备驱动编写 &#xff08;misc&#xff09; 第三章 Linux 设备驱动编写及设备节点自动生成 &#xff08;cdev&#xff09; 第四章 Linux 平台总线platform与设备树 第五章 Linux 设备树中pinctrl与gpio&#xff08;…

OBD针脚定义参考

OBD定义的一种标准的参考&#xff0c;不同的车场有不同的定义&#xff0c;貌似没有统一。 在某宝上看到的ODB转db9的不同的线序&#xff1a; 1&#xff09;1/2/3/6几个针脚都是一样的&#xff0c;分别上下针脚对应。 2&#xff09;其中一种4/5/7/8也是上下对应的&#xff1b;另…

自动化处理,web自动化测试处理多窗口+切换iframe框架页总结(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 web 自动化之处理…

APP外包开发的学习流程

学习iOS App的开发是一项有趣和富有挑战性的任务&#xff0c;是一个不断学习和不断进步的过程。掌握基础知识后&#xff0c;不断实践和尝试新的项目将使您的技能不断提升。下面和大家分享一些建议&#xff0c;可以帮助您开始学习iOS App的开发。北京木奇移动技术有限公司&#…

小红书 KOL 种草执行策略揭秘:打造爆款产品,提升品牌影响力

随着互联网的普及和社交媒体的发展&#xff0c;小红书成为了众多年轻人购物决策的重要参考平台。小红书 KOL 种草作为一种新兴的营销方式&#xff0c;以其强大的传播力和影响力&#xff0c;越来越受到各大品牌的重视。本文伯乐网络传媒将给大家深入探讨小红书 KOL 种草的执行策…

mysql转sqlite3

在项目中需要将mysql迁移到sqlite3中&#xff0c;此时需要作数据转换 准备工作 下载mysql2sqlite转换工具 https://github.com/dumblob/mysql2sqlite/archive/refs/heads/master.zip 下载sqlite3 https://www.sqlite.org/download.html 转换 命令行中输入如下命令 1、cd …

海康威视摄像头二次开发_云台控制_视频画面实时预览(基于Qt实现)

一、项目背景 需求:需要在公司的产品里集成海康威视摄像头的SDK,用于控制海康威视的摄像头。 拍照抓图、视频录制、云台控制、视频实时预览等等功能。 开发环境: windows-X64(系统) + Qt5.12.6(Qt版本) + MSVC2017_X64(使用的编译器) 海康威视提供了设备网络SDK,设备网…