【Java第33期】:在普通的Maven项目中存储Bean对象并获取和使用

news2024/10/6 17:37:28

作者:有只小猪飞走啦

博客地址:https://blog.csdn.net/m0_62262008?type=blog

内容:存储Bean对象,再在Spring中获取Bean对象,对其进行使用。

在这里插入图片描述

文章目录

  • 前言
  • 一,存储Bean对象
    • 1,创建Bean对象
    • 2,把Bean注入到Spring中
  • 二,获取并使用Bean对象
    • 1,得到Spring上下文
      • 第一种
      • 第二种
    • 2,获取Bean对象
      • 第一种:根据名称来获取Bean
      • 第二种:根据一个Class 参数获取bean
      • 第三种:根据根据String (bean id)+Class 参数获取bean
    • 3,使用Bean对象

前言

本博客内容是小博主在学习之后的总结,如果哪里有错误或者不太完善的都可以私聊我哈,如果哪里你不太理解的也可以来私聊我哦~

一,存储Bean对象

我们可以总结一下,存储Bean对象需要以下两步:

  1. 存储 Bean 之前,先得有 Bean ,因此先要创建⼀个 Bean。
  2. 将创建的 Bean 注册到 Spring 容器中。

那我们一一来实现一下以上的步骤:

1,创建Bean对象


package com.tom;

public class User1 {
    public void sayHi(){
        System.out.println("Hi,Spring~");
    }
}

我们可以看到,所谓的Bean,其实就是Java语言中一个普通的对象。

2,把Bean注入到Spring中

在创建好的项⽬中添加 Spring 配置⽂件 spring-config.xml,将此⽂件放到 resources 的根⽬录下,如下图所示:
在这里插入图片描述
Spring 配置⽂件的固定格式为以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

再将 User1 对象注册到 Spring 中就可以,具体操作是在 中添加如下配置:

<bean id="user1" class="com.tom.User1"></bean>

注意:上面添加的配置中id必须是小写的。

二,获取并使用Bean对象

获取并使⽤ Bean 对象,分为以下 3 步:

  1. 得到 Spring 上下⽂对象,因为对象都交给 Spring 管理了,所以获取对象要从 Spring 中获取,就要先得到 Spring 的上下⽂。
  2. 通过 Spring 上下⽂,获取某⼀个指定的 Bean 对象。
  3. 使⽤ Bean 对象。
    注意:如果想要获取多个Bean对象,只要重复以上的2、3步骤即可

那下面我们来一一操作一下上面的步骤:

1,得到Spring上下文

顺便复习一下,什么是Spring应用上下文?
简单地说:应用上下文即是Spring容器的一种抽象化表述,而我们常见的ApplicationContext本质上说就是一个维护Bean定义以及对象之间协作关系的高级接口。我们都知道Spring的本质是一个IoC容器。而容器并不唯一,框架本身就提供了很多个容器的实现,大概分为两种类型:一种是不常用的BeanFactory,这是最简单的容器,只能提供基本的DI功能;还有一种就是继承了BeanFactory后派生而来的应用上下文,其抽象接口也就是上面提到的的ApplicationContext,它能提供更多企业级的服务,例如解析配置文本信息等等。
Spring提供的多种类型容器:
(1) AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式;

(2) ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式;

(3)FileSystemXmlApplicationContext: 从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件;

(4)AnnotationConfigWebApplicationContext: 专门为web应用准备的,适用于注解方式;

(5)XmlWebApplicationContext: 从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。

上面说了这么多,就是为了让我们更加理解Spring,下面我们来得到Spring的上下文-----》

第一种

Spring 上下⽂对象可使⽤ ApplicationContext,实现代码如下:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App3 {
    public static void main(String[] args) {
        ApplicationContext context =
               new  ClassPathXmlApplicationContext("spring-config.xml");
    }
}

注意:(1)得到 Spring 的上下⽂对象,创建的时候需要配置 Spring 配置信息
(2 )spring-config.xml 一定要写对,如下:
在这里插入图片描述
把它复制粘贴过来即可。

第二种

除了 ApplicationContext 之外,我们还可以使⽤ BeanFactory 来作为 Spring 的上下⽂,如下代码所示:

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class App3 {
    public static void main(String[] args) {
        BeanFactory beanFactory =
                new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
                }
    }

ApplicationContext 和 BeanFactory 效果是⼀样的,ApplicationContext 属于 BeanFactory 的⼦类。

2,获取Bean对象

第一种:根据名称来获取Bean

import com.tom.User1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App3 {
    public static void main(String[] args) {
        
        ApplicationContext context =
               new  ClassPathXmlApplicationContext("spring-config.xml");
        User1 user1 = (User1) context.getBean("user1");
    }
}

注意:这里getBean括号里的内容要和上面配置中的”user1“要一致,如下:
在这里插入图片描述
在这里插入图片描述

第二种:根据一个Class 参数获取bean

import com.tom.User1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

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

        ApplicationContext context =
               new  ClassPathXmlApplicationContext("spring-config.xml");
        //User1 user1 = (User1) context.getBean("user1");
        User1 user1 = context.getBean(User1.class);
    }
}

和第一种方法对比,我们可以发现,这里的context不需要强转为User1,为什么呢?
因为User1.class中有User1的路径,而根据名称的不知道其类型,所以要把其强置为User1的类型。

第三种:根据根据String (bean id)+Class 参数获取bean

import com.tom.User1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

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

        ApplicationContext context =
               new  ClassPathXmlApplicationContext("spring-config.xml");
        User1 user1 = context.getBean("user1",User1.class);
        }
    }    

一般会这样使用来获取Bean对象。

3,使用Bean对象

import com.tom.User1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

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

        ApplicationContext context =
               new  ClassPathXmlApplicationContext("spring-config.xml");
        User1 user1 = context.getBean("user1",User1.class);
        user1.sayHi();
        }
   }

运行结果:
在这里插入图片描述
以上就是Bean对象的存储、获取和使用的全部过程,希望对你有帮助!
关注小猪,小猪带你一起学习~
下期再见啦!
请添加图片描述

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

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

相关文章

过控Matlab-串级控制系统的参数整定(二)

太原理工大学过程控制实验之串级控制系统的参数整定 过控Matlab-串级控制系统的参数整定实验内容1.根据动态特性参数法对简单控制系统的控制器参数整定2.根据稳定边界方法对简单控制系统的控制器参数整定利用稳定边界法&#xff0c;分别计算系统采用P、PI、PID调节规律时的PID控…

玩机搞机---关于安卓机型工厂固件 刷机 端口解密 解bl锁 写串 nv损坏 等相关常识

*******工程机和工厂固件方面的常识 可能很多玩机友友对什么是工厂固件比较陌生。那么今天的话题就围绕这个和大家讨论下。其实一般厂家的流程都是在一部机型推放市场之前&#xff0c;需要经过预研企划、研发设计、全面测试等诸多环节。在这一整个改善的全过程中&#xff0c;厂…

使用Eclipse搭建STM32嵌入式开发环境

1. Eclipse 软件和相关工具的安装 使用 Eclipse 开发 STM32 等嵌入式软件项目时&#xff0c;需要安装的软件或者工具有&#xff1a; Eclipse 软件本身&#xff0c;eclipse-inst-jre-win64.exe交叉编译工具链&#xff0c;gcc-arm-none-eabi-10.3-2021.10-win32make 构建工具&a…

linux读写锁

这里写目录标题读写锁的认识读写锁的相关函数练习读写锁的认识 &#xff08;1&#xff09;读写锁是一把锁 &#xff08;2&#xff09;读写锁的类型&#xff1a; pthread_rwlock_t lock 又分“读锁”&#xff08;对内存进行读操作&#xff09;和“写锁”&#xff08;对内存进行…

【数据结构Note5】- 树和二叉树(知识点超细大全-涵盖常见算法 排序二叉树 线索二叉树 平衡二叉树 哈夫曼树)

文章目录5.1 树和二叉树引入5.1.1 树的概念5.1.2 树的表示5.1.3 树中基本术语5.1.4 树的表示5.2 二叉树5.2.1 概念5.2.2 二叉树的性质5.2.3 特殊的二叉树5.2.4 二叉树的顺序存储5.2.5 二叉树的链式存储5.2.6 二叉树的深度优先遍历&#xff08;递归&#xff09;5.2.7 二叉树的遍…

[MQ] 死信队列介绍与场景描述

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

Js逆向教程-11常见混淆AA和JJ

Js逆向教程-11常见混淆AA和JJ js默认 支持Unicode的。 所以支持所有的国家语种。 有没有哪些国家的和O很像但不是O,和0很像但不是0,和p很像但不是p 所以可以用这个相近的符号进行代码混淆。 var O00OO,o00oo;一、AA混淆和OO混淆 https://www.sojson.com/aaencode.html 这个…

Docker guide

前言 docker学习记录&#xff0c;内容参考 Docker Training Course for the Absolute Beginner Basic Command docker pull <Image:只是下载image&#xff0c;不会运行docker run <Image>:启动image实例&#xff0c;如果image不在docker host上&#xff0c;docker会…

【长难句分析精讲】状语从句

1. 状语从句九大类 时间状语从句&#xff1a;after / before / when / while / as / since / once / until地点状语从句&#xff1a;where原因状语从句&#xff1a;because / as / for / since让步状语从句&#xff1a;though / although / even if even though / while / as…

[Spring Cloud] Eureka Server安装

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

ARM仿真器J-Link灯不亮的解决办法

感慨&#xff1a; 网络世界真是越来越封闭了啊&#xff0c;下载东西越来越难。 解决问题会越来越难。 解决仿真器Jlink灯不亮这个问题用了一下午..... 步骤&#xff1a; &#xff08;弯路&#xff1a;windows安装AT91-ISP&#xff0c;发现SAM_PROG v2.4加载bin后不能点击Write…

Android Camera性能分析 第23讲 录像Buffer Path实战和Trace分析

​ 本讲是Android Camera性能分析专题的第23讲&#xff0c;我们介绍录像Buffer Path实战和Trace分析&#xff0c;包括如下内容&#xff1a; Video Codec MediaRecorder.getSurface录像Buffer Path Trace分析Video Codec2 MediaRecorder.getSurface录像Buffer Path Trace分析…

java计算机毕业设计组成原理教学网站(附源码、数据库)

java计算机毕业设计组成原理教学网站&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项…

手把手教你搭建K8S集群

搭建前提条件&#xff1a;VMare16pro CentOS-7-x86_64-DVD-2009.iso镜像文件&#xff0c; 远程连接工具Xshell或者MobaXterm 首先创建三台centos7的虚拟机&#xff0c;装虚拟机的话大家可以参照网上资料&#xff0c;非常容易。 使用 kubeadm 安装 Kubernetes 集群 1&#…

通关算法题之 ⌈二叉树⌋ 下

填充每个节点的下一个右侧节点指针 116、填充每个节点的下一个右侧节点指针 给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; }填充…

手机短信注册验证与登录功能

文章目录一、前言二、准备工作三、发布短信1、基本测试发布①可-使用测试模板进行调试②测试结果③注意&#xff0c;可能会调试失败&#xff0c;是因为没有余额。进入首页点击头像>进入余额充值&#xff1b;一条大概4分钱④创建SpringBoot项目demo2、可自定义模板&#xff0…

[acwing周赛复盘] 第 78 场周赛20221119

[acwing周赛复盘] 第 78 场周赛20221119 一、本周周赛总结二、4719. 商品种类1. 题目描述2. 思路分析3. 代码实现三、4720. 字符串1. 题目描述2. 思路分析3. 代码实现四、4721. 排队1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 这周蛮简单的。T2 栈的应用…

Kafka - Kafka应用场景|基础架构|Windows安装|命令行操作

文章目录1. 消息队列的应用场景2. 消息队列的两种模式3. Kafka 的基础架构4. Kafka 的安装5. Kafka 命令行操作1. 主题命令行操作2. 生产者命令行操作3. 消费者命令行操作1. 消息队列的应用场景 传统的消息队列的主要应用场景包括&#xff1a;缓存/消峰、解耦和异步通信。 ①…

Packet Tracer - 配置多区域 OSPFv3

地址分配表 设备 接口 IPv6 地址 OSPF 区域 RA G0/0 2001:DB8:1:A1::1/64 1 G0/1 2001:DB8:1:A2::1/64 1 S0/0/0 2001:DB8:1:AB::2/64 0 本地链路 FE80::A 不适用 RB G0/0 2001:DB8:1:B1::1/64 0 S0/0/0 2001:DB8:1:AB::1/64 0 S0/0/1 2001:DB8:1:BC:…

JVM运行时数据区域之PCRegister和虚拟机栈

运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据 区域。这些区域有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进程的启 动而一直存在&#xff0c;有些区域则是依赖用户线程的启动和结束而建立…