【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.hqwc.cn/news/55418.html

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

相关文章

安防视频汇聚平台EasyCVR视频广场面包屑侧边栏支持拖拽操作

智能视频监控平台EasyCVR能在复杂的网络环境中&#xff0c;将海量设备实现集中统一接入与汇聚管理&#xff0c;实现视频的处理与分发、录像与存储、按需调阅、平台级联等。 TSINGSEE青犀视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协…

关于 Ubuntu 长按 shift 无效, 按 Esc 直接进入 grub 改密码的解决方法

本次长按shift没有反应&#xff0c;直接进入了系统界面&#xff0c;所以改用长按Esc键&#xff0c;步骤如下&#xff1a; 1. 长按esc&#xff0c;进入grub>提示 2.输入grub>normal &#xff0c;回车 3.上一步回车后&#xff0c;继续敲击Esc &#xff0c;出现grub界面 …

ChatGPT实战:创业咨询,少走弯路,少踩坑

用九死一生形容创业再适合不过&#xff0c;不过一旦成功回报也很诱人&#xff0c;这也是为什么那么多人下场创业。纸上得来终觉浅&#xff0c;绝知此事要躬行&#xff0c;创过业的人都知道其中的心酸&#xff0c;而他们也建议你去创业&#xff0c;因为那真不是一般人能干的事。…

谈谈网络安全

目录 1.概念 2.发展现状 3.主要问题 1.概念 网络安全是指保护计算机网络和其中的数据免受未经授权访问、损坏、窃取或破坏的过程和技术。网络安全涉及预防和检测潜在的威胁和漏洞&#xff0c;并采取措施保护网络的机密性、完整性和可用性。 网络安全的概念包括以下几个方面&am…

小研究 - Mysql快速全同步复制技术的设计和应用(三)

Mysql半同步复制技术在高性能的数据管理中被广泛采用&#xff0c;但它在可靠性方面却存在不足.本文对半同步复制技术进行优化&#xff0c;提出了一种快速全同步复制技术&#xff0c;通过对半同步数据复制过程中的事务流程设置、线程资源合理应用、批量日志应用等技术手段&#…

MySQL的索引使用的数据结构,事务知识

一、索引的数据结构&#x1f338; 索引的数据结构&#xff08;非常重要&#xff09; mysql的索引的数据结构&#xff0c;并非定式&#xff01;&#xff01;&#xff01;取决于MySQL使用哪个存储引擎 数据库这块组织数据使用的数据结构是在硬盘上的。我们平时写的代码是存在内存…

【计算机网络】12、frp 内网穿透

文章目录 一、服务端设置二、客户端设置 frp &#xff1a;A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet。是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且…

SQL分类及通用语法数据类型(超详细版)

一、SQL分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录DCL: 数据控制语言&#xff0c;用来创建数据库…

从URL取值传给后端

从URL传值给后端 http://127.0.0.1:8080/blog_content.html?id8点击浏览文章详情&#xff0c;跳转至详情页面 从 url 中拿出文章 id&#xff0c;传给后端 首先拿到url然后判断是否有值&#xff0c;从问号后面取值params.split(&) 以 & 作为分割然后遍历字符数组 param…

前端个人年度工作述职报告(二十篇)

前端个人年度工作述职报告篇1 尊敬的各位领导、各位同仁&#xff1a; 大家好!按照20__年度我公司就职人员工作评估的安排和要求&#xff0c;我认真剖析、总结了自己的工作情况&#xff0c;现将本人工作开展情况向各位领导、同仁做以汇报&#xff0c;有不妥之处&#xff0c;希…

faac内存开销较大,为方便嵌入式设备使用进行优化(valgrind使用)

faac内存开销较大&#xff0c;为方便嵌入式设备使用进行优化&#xff0c;在github上提了issues但是没人理我&#xff0c;所以就搞一份代码自己玩吧。 基于faac_1_30版本&#xff0c;原工程https://github.com/knik0/faac faac内存优化: faac内存开销较大&#xff0c;为方便嵌入…

智能卡通用安全检测指南 思度文库

范围 本标准规定了智能卡类产品进行安全性检测的一般性过程和方法。 本标准适用于智能卡安全性检测评估和认证。 规范性引用文件 下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件&#xff0c;仅注日期的版本适用于本文件。凡是不注日期的引用文件&#xff0c;…