建立网站需要多少钱多少钱28湖南岚鸿/上海十大公关公司排名
目录
一、创建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对象
相关文章:

【Spring】创建一个Spring项目与Bean对象的存储
目录 一、创建Spring项目 1、创建Maven项目 2、配置maven国内源 3、引入spring依赖 4、添加启动类 二、将Bean对象存储到Spring(IoC容器) 1、创建Bean对象 2、将Bean存储到spring(容器)中 3、获取Bean对象 3.1、Applicatio…...

Docker的入门与使用
什么是Docker? docker官网 简介与概述 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上&#x…...

Smart HTML Elements 16.1 Crack
Smart HTML Elements 是一个现代 Vanilla JS 和 ES6 库以及下一代前端框架。企业级 Web 组件包括辅助功能(WAI-ARIA、第 508 节/WCAG 合规性)、本地化、从右到左键盘导航和主题。与 Angular、ReactJS、Vue.js、Bootstrap、Meteor 和任何其他框架集成。 智…...

[分享]STM32G070 串口 乱码 解决方法
硬件 NUCLEO-G070RB 工具 cubemx 解决方法 7bit 改为 8bit printf 配置方法 添加头文件 #include <stdio.h> 添加重定向代码 #ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endi…...

[代码案例]学会python读写各类文件的操作(excel,txt,mat)
简介 python读写三类文件 excel文件 txt文件 mat文件 代码 """Description: python 读写各类文件 操作 """ import scipy as scipy from scipy.io import loadmat import xlwt import xlrd 读写excel文件workbook xlrd.open_workbook(test1.…...

【LeetCode】练习习题集【4月 - 7 月】
LEETCODE习题集【4月-7月总结】 简单 数组部分 1.重复数 题目: 在一个长度u为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中…...

C# 子类强制转换为父类异常,引出的C#Dll加载机制,以及同类名同命名空间同dll程序集在C#中是否为同一个类的研究。
已知,子类B继承自父类A,但是在代码运行时,B类强制转换为A类,却报代码转换异常。 很奇怪的问题吧,不过这个也是难得机会,去研究C#运行的底层原理。 下面是报错的代码片段。 string className _shapeRefle…...

Go语言进阶
个人笔记,大量摘自Go语言高级编程、Go|Dave Cheney等 更新 go get -u all 在非go目录运行go install golang.org/x/tools/goplslatest更新go tools:在go目录运行go get -u golang.org/x/tools/...,会更新bin目录下的应用; 运行…...

Java的枚举
枚举 对应英文(enumeration, 简写enum) 枚举是一组常量的集合,属于一种特殊的类,里面只包含一组有限的特定的对象。 自定义类实现枚举 1.不需要提供setXxx方法,因为枚举对象值通常为只读. 2.对枚举对象/属性使用 final static共同修饰…...

Pytest测试框架3
目录: pytest结合数据驱动-yamlpytest结合数据驱动-excelpytest结合数据驱动-csvpytest结合数据驱动-jsonpytest测试用例生命周期管理(一)pytest测试用例生命周期管理(二)pytest测试用例生命周期管理(三&a…...

【数学建模】-- Matlab中图的最短路径
前言: 图的基本概念: 若想简单绘制图可以利用此网站: 左上角Undirected/Directed是无向图/有向图 左边 0-index ,1-index为0下标,1下标。 Node Count为节点个数 Graph Data:最初尾节点的名称ÿ…...

中国月入过万的人多不多
Q:中国月入过万的人多不多 单从这个问题来看,这是个费米问题啊: 估算中国月入过万的有多少人? 要解决费米问题,其实也很好办,就是逻辑拆解,这篇文章也分为3个部分,先从公开数据中估…...

苹果电脑图像元数据编辑器:MetaImage for Mac
MetaImage for Mac是一款功能强大的照片元数据编辑器,它可以帮助用户编辑并管理照片的元数据信息,包括基本信息和扩展信息。用户可以根据需要进行批量处理,方便快捷地管理大量照片。 MetaImage for Mac还提供了多种导入和导出格式࿰…...

BeanUtils.copyProperties() 详解
BeanUtils.copyProperties会进行类型转换; BeanUtils.copyProperties方法简单来说就是将两个字段相同的对象进行属性值的复制。如果 两个对象之间存在名称不相同的属性,则 BeanUtils 不对这些属性进行处理,需要程序手动处理。 这两个类在不同…...

基于CentOS 7构建LVS-DR集群
DIPVIPRIPClient192.169.41.139 LVS 192.168.41.134192.169.41.10RS1192.168.41.135RS2192.168.41.138 要求: node4为客户端,node2为LVS,node3和node4为RS。 1.配置DNS解析(我这里使用本地解析) 192.168.41.134 www.y…...

openEuler-OECA考试报名火热开启,尊享半价优惠 作者:HopeInfra 发布时间:2023-08-10
近日,润和软件人才评定报名系统已成功上线运行,现openEuler-OECA人才评定考试报名优惠活动火热开启,欢迎大家报名咨询! 关于openEuler人才评定 随着openEuler及其发行版本在各个行业使用量逐年增多,相关人才的评定诉求…...

侯捷 C++面向对象编程笔记——10 继承与虚函数
10 继承与虚函数 10.1 Inheritance 继承 语法::public base_class_name public 只是一种继承的方式,还有protect,private 子类会拥有自己的以及父类的数据 10.1.1 继承下的构造和析构 与复合下的构造和析构相似 构造是由内而外 Container …...

mysql日期函数(查询最近n(天/月/年)、计算日期之间的天数等)
mysql日期函数 目录 mysql查询最近一个月数据返回当前日期和时间将字符串转变为日期日期 d 减去 n 天后的日期计时间差,返回 datetime_expr2 − datetime_expr1 的时间差算查询当天数据 ADDDATE(d,n)计算起始日期 d 加上 n 天的日期 SELECT ADDDATE("2017-06…...

通过anvt X6和vue3实现图编辑
通过anvt X6 X6地址:https://x6.antv.antgroup.com/tutorial/about; 由于节点比较复杂,使用vue实现的节点; x6提供了一个独立的包 antv/x6-vue-shape 来使用 Vue 组件渲染节点。 VUE3的案例: <template><div…...

win2012 IIS8.5 安装PHP教程,一些版本不能用
因为一直用win2003IIS6.0PHP的环境,所以搭建PHP自认为非常熟悉了,但是最近在搭建win2012IIS8.5PHP的环境时,我遇到了一些问题,经过4个小时的折腾,终于搞定了,本文记录一些经验,可能不少朋友也会…...

sqlalchemy执行原生sql
# 有的复杂sql 用orm写不出来---》用原生sql查询 # 原生sql查询,查出的结果是对象 # 原生sql查询,查询结果列表套元组 准备工作 from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engineengine create_engine(&…...

Python-OpenCV中的图像处理-图像平滑
Python-OpenCV中的图像处理-图像平滑 图像平滑平均滤波高斯模糊中值模糊双边滤波 图像平滑 使用低通滤波器可以达到图像模糊的目的。这对与去除噪音很有帮助。其实就是去除图像中的高频成分(比如:噪音,边界)。所以边界也会被模糊…...

Mongoose http server 例子
今天抽了点时间看了一下 mongoose的源码, github 地址,发现跟以前公司内部使用的不太一样,这里正好利用其 http server 例子来看一下。以前的 http message 结构体是这样的: /* HTTP message */ struct http_message {struct mg_…...

1、初识HTML
1、初识HTML 前端就是写一些基本的页面,HTML即超文本标记语言:Hyper Text Markup Language,超文本包括,文字、图片、音频、视频、动画等,HTML5,提供了一些新的元素和一些有趣的新特性,同时也建…...

线性代数(三) 线性方程组
前言 如何利用行列式,矩阵求解线性方程组。 线性方程组的相关概念 用矩阵方程表示 齐次线性方程组:Ax0;非齐次线性方程组:Axb. 可以理解 齐次线性方程组 是特殊的 非齐次线性方程组 如何判断线性方程组的解 其中R(A)表示矩阵A的…...

Apoll 多项式规划求解
一、纵向规划 void QuarticPolynomialCurve1d::ComputeCoefficients(const float x0, const float dx0, const float ddx0, const float dx1,const float ddx1, const float p) {if (p < 0.0) {std::cout << "p should be greater than 0 at line 140." &…...

ssm亚盛汽车配件销售业绩管理统源码和论文PPT
ssm亚盛汽车配件销售业绩管理统源码和论文PPT007 开发工具:idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具:navcat,小海豚等 开发技术:java ssm tomcat8.5 研究的意义 汽车配件销售类企业近年来得到长足发展,在市场份额不断扩大同时…...

发布属于自己的 npm 包
1 创建文件夹,并创建 index.js 在文件中声明函数,使用module.exports 导出 2 npm 初始化工具包,package.json 填写包的信息(包的名字是唯一的) npm init 可在这里写包的名字,或者一路按回车,后…...

Redis主从复制和哨兵架构图,集成Spring Boot项目实战分享
目录 1. Redis 主从复制2. Redis 哨兵架构3. 集成spring boot项目案列 Redis 主从复制和哨兵架构是 Redis 集群的重要组成部分,用于提高 Redis 集群的可用性和性能。以下是 Redis 主从复制和哨兵架构的详细介绍,包括架构图和 Java 代码详解。 1. Redis …...

java中try-with-resources自动关闭io流
文章目录 java中try-with-resources自动关闭io流0 简要说明try-with-resources java中try-with-resources自动关闭io流 0 简要说明 在传统的输入输出流处理中,我们一般使用的结构如下所示,使用try - catch - finally结构捕获相关异常,最后不…...