Spring为什么这么火 之 Spring的创建及存储、获取Bean对象

news2024/11/17 11:22:16

目录

1、创建Spring项目

1.1、创建一个Maven项目

 1.2、添加Spring框架支持

1.3、添加启动类

2、存储Bean对象

2.1、创建Bean对象

2.2、将Bean对象注册到Spring容器中

3、获取、使用Bean对象

3.1、得到Spring上下文对象

使用ApplicationContext作为Spring的上下文 【更常用】

使用 BeanFactory作为Spring的上下文

面试题:ApplicationContext   VS  BeanFactory

3.2、通过Spring上下文,获取某一个指定的对象【3种方式】 

3.3、使用Bean对象


1、创建Spring项目

三步即可搞定:

1.1、创建一个Maven项目

 1.2、添加Spring框架支持

在pom.xml中添加:

    <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>

添加依赖,加载时间可能需要一点时间,耐心等待哈

1.3、添加启动类

在java文件下创建启动类即可:


2、存储Bean对象

存入,需要先有这么个对象,才能谈到存呀~

2.1、创建Bean对象

Bean对象就是Java中一个普通对象而已啦~

例:


public class User {
    public void Hello() {
        System.out.println("hello world");
    }
}

2.2、将Bean对象注册到Spring容器中

添加配置文件,并且要以resources为根目录:

 该文件下,添加如下内容:

<?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>

如果爆红,刷新一下即可~

接下来就是正式存储Bean对象,具体操作:

在<beans>中添加如下代码:

<bean id="user" class="User"></bean>

这里的class值需要对应:

 

 如果你的类在某个包下,那你就包名1.包名2.类名


3、获取、使用Bean对象

3.1、得到Spring上下文对象

Spring上下文是什么?其实就是Spring本身 

使用ApplicationContext作为Spring的上下文 【更常用】

        因为对象都交给Spring管理了,所以获取对象对象要从Spring中获取,那就得先得到Spring的上下文

ApplicationContext context = new ClassPathXmlApplicationContext("Spring.xml");

括号里填什么呢?

 

使用 BeanFactory作为Spring的上下文

BeanFactory context = new XmlBeanFactory(new ClassPathResource("Spring.xml"));

二者的效果是一样的

面试题:ApplicationContext   VS  BeanFactory

相同点:

  • 都可以得到Spring上下文对象
  • 都是来自Spring的顶级接口

不同点:

  • 继承关系:ApplicationContext   属于 BeanFactory 的子类
  • 功能:BeanFactory只有最基础的访问Bean的能力,但是ApplicationContext除了有BeanFactory功能以外,还包含了自己独有的功能,如:国际化支持、资源访问、事件传播等
  • 性能方面的区别:ApplicationContext 加载方式是将Bean对象一次性加载,后期访问Bean对象时就会很快,BeanFactory需要某个Bean时,采用加载Bean对象,所以它在执行Bean获取时,比较慢

3.2、通过Spring上下文,获取某一个指定的对象【3种方式】 

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


public class Test {
    public static void main(String[] args) {
        //1、得到Spring的上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("Spring.xml");

        //2、加载某个Bean
        //方法一:
        User user = (User) context.getBean("user");//根据bean的名称【标识】

        //方法二:
        //不用强转了
        // User user1 = context.getBean(User.class);//根据bean类型获取bean

        //方法三:
        User user2 = context.getBean("user",User.class);//根据bean名称加上bean对象/类型

        //3、调用相应的方法
        user.Hello();
        //user1.Hello();
        user2.Hello();
    }
}

方法二中,为什么把他注释了呢?因为咱们在Spring.xml中,是这样写滴:

 

        一个类,引入了两次,当它加载时,他就不知道加载哪个【一个类,每注入一次,都是不一样的,可以自己去敲代码,看看user和user1是否相等】 ,当我们只注入一次时,当然是可以使用方法二的

        最优方法是方法三,没有了方法一的强转【可能会带来问题】,也不会产生方法二的弊端

 

注意:Id需要一致:

 

 

3.3、使用Bean对象

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


public class Test {
    public static void main(String[] args) {
        //1、得到Spring的上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("Spring.xml");

        //2、加载某个Bean
        User user = (User) context.getBean("user");

        //3、调用相应的方法
        user.Hello();
    }
}

咱们下期见咯~ 

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

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

相关文章

服务器相关命令(docker相关)

一:安装docker 之前安装过旧版本&#xff0c;使用以下命令可以卸载(整个copy过去): yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-e…

AOP面向切面编程

AOP 面向切面编程 AOP是什么 AOP 为 Aspect Oriented Programming 的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。 AOP 是 OOP 的延续&#xff0c;是软件开发中的一个热点&#xff0c;是 j…

【Linux】-- 环境变量

目录 环境变量 常见环境变量 HOME 和环境变量相关的命令 通过代码如何获取环境变量 环境变量参数 通过第三方变量environ获取 通过getenv函数来特定访问获取 通过setenv函数来特定访问获取 环境变量 命令&#xff1a;which ls 将命令ls的完整路径写入到标准输出。 #in…

用R语言理解洛必达法则

文章目录5 洛必达法则极限的种类洛必达法则作用于幂函数5 洛必达法则 极限的种类 令NNN为常数&#xff0c;则常规的极限运算大致有以下几种 ∞N∞∞⋇N∞(N̸0)N∔∞∞N−∞−∞N/∞0N/0∞N∞∞(N̸1)∞N∞(N̸0)\begin{matrix} &\infty\pm N\infty\quad&\infty\divi…

MySQL版本由5.7.37更新到5.7.39

一、前景 由于mysql5.7.37存在漏洞&#xff0c;影响系统安全&#xff0c;所以需要将mysql版本升级到5.7的最新版本5.7.39。 二、步骤 1、下载5.7.39的安装包&#xff1a; 下载链接如下&#xff1a; https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.39-1.el…

node基础知识

node基础知识 node在真实项目中的应用 webpack基于node环境 用nodejs的语法合并压缩打包 js放到客户端浏览器中执行 放到服务器端运行&#xff1a;java因为jdk php因为tomcat c#因为有.net framework 项目架构1&#xff1a;中小型项目-基于nodejs构建全栈 项目架构2&#xff1a…

mysql转DM达梦数据库+springboot兼容DM数据库+springboot兼容activity5.22.0

由于现在做的项目中需要针对数据库进行国产化操作&#xff0c;最终完成从mysql到达梦的迁移&#xff0c;记录整合迁移记录如下&#xff1a;安装初始化达梦数据库&#xff08;傻瓜式安装即可&#xff09;安装达梦数据库&#xff08;windows、linux&#xff09;初始化数据库实例关…

代码质量与安全 | 新时代:2023年商业软件开发的五大关键目标

进入2023年&#xff0c;技术趋势仍然聚焦于人工智能、边缘智能和气候变化领域&#xff0c;但供应链增速放缓和日益增长的消费者需求阻碍着创新的步伐。为了在行业中保持竞争力&#xff0c;并实现软件工程预定目标&#xff0c;软件开发领导者需要主动制定预算和时间管理计划&…

Java设计模式-模板模式Template

介绍 模板方法模式&#xff08;Template Method Pattern&#xff09;&#xff0c;又叫模板模式(Template Pattern)&#xff0c;z 在一个抽象类公开定义了执行。它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。简单说&#xff…

中移链合约常用开发介绍 (二)多索引表的使用

一、目的本文详细介绍了开发、部署和测试一个地址簿的智能合约的流程&#xff0c;适用于EOS的初学者了解如何使用智能合约实现本地区块链上数据的持久化和对持久化数据的增删改查。二、智能合约介绍区块链作为一种分布式可信计算平台&#xff0c;去中心化是其最本质的特征。每笔…

17.Isaac教程--机器学习流程

机器学习流程 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录机器学习流程模拟训练PC 和边缘设备上的推理使用 TensorRT 进行推理Torch推理使用 Tensorflow 进行推理示例PyCodelet配套代码Tensorflow 推理小码TensorRT 推理小码SampleAc…

23种设计模式(三)——模板方法模式【组件协作】

文章目录意图什么时候使用模板方法真实世界类比常说的钩子模板方法的实现模板方法模式的优缺点亦称&#xff1a; Template Method 意图 它的主要思想是&#xff0c;定义一个操作的一系列步骤&#xff0c;对于某些暂时确定不下来的步骤&#xff0c;就留给子类去实现好了&#x…

位图与矢量图的区别

相信大家在日常的工作过程中&#xff0c;经常会听到位图和矢量图&#xff0c;那么位图和矢量图的区别是什么呢&#xff1f; 1.定义 ①位图&#xff1a;称为点阵图像或栅格图像&#xff0c;是由称作像素&#xff08;图片元素&#xff09;的单个点组成的。这 些点可以进行不同的排…

测试用例设计方法有哪些?举例说明

众所周知&#xff0c;测试用例是编制的一组测试输入、执行条件及预期结果&#xff0c;专门为的是某个特殊目标&#xff0c;即测试某个程序路径&#xff0c;或是核实是否满足某个特定的需求。一般来讲&#xff0c;常用的测试用例设计方法有五种&#xff0c;分别是&#xff1a;正…

微信小程序中如何实现双向绑定

一、双向绑定 在微信小程序中如何实现双向绑定&#xff1f;在开始之前先介绍下什么是双向绑定&#xff0c;js中定义变量数据后&#xff0c;通过{{}}绑定到模板中&#xff0c;这个过程是单向绑定&#xff0c;即数据的更新只能是js中更新了数据&#xff0c;模板中跟着修改。但是如…

深度学习笔记:神经网络(3)

关于本章之前内容可以参考以下之前文章&#xff1a; 1 https://blog.csdn.net/Raine_Yang/article/details/128473486?spm1001.2014.3001.5501 2 https://blog.csdn.net/Raine_Yang/article/details/128584916?spm1001.2014.3001.5501 神经网络的输出层设计 机器学习问题一般…

2022年12月青少年软件编程(Python) 等级考试试卷(三级)

2022. 12 青少年软件编程&#xff08;Python&#xff09; 等级考试试卷&#xff08;三级&#xff09; 一、 单选题(共 25 题&#xff0c; 共 50 分) 1.列表 L1 中全是整数&#xff0c; 小明想将其中所有奇数都增加 1&#xff0c; 偶数不变&#xff0c; 于是编写了如下图 所示的…

高级树结构之平衡二叉树(ALV树)

文章目录平衡二叉树简介失衡类型&处理办法RR型失衡【左旋调整】调整演示代码实现LL型失衡【右旋调整】调整演示代码实现RL型失衡【先右旋后左旋调整】调整演示代码实现LR型失衡【先右旋后左旋调整】调整演示代码实现插入操作综合代码演示平衡二叉树简介 在数据有序的情况下…

Codeforces Round #842 (Div. 2)

Codeforces Round #843 (Div. 2) 传送门 不想搞的很累&#xff0c;对自己不做要求&#xff0c;有兴趣就做。 A. Greatest Convex #include <bits/stdc.h>using namespace std; const int maxn 1e6 10; vector<int> cnt[maxn]; map<int, int> mp;int mai…

nvm安装 疑难问题解决

nvm介绍 NVM是node.js的版本管理器&#xff0c;设计为每个用户安装&#xff0c;并在每个shell中调用。nvm可以在任何兼容posix的shell (sh、dash、ksh、zsh、bash)上运行&#xff0c;特别是在这些平台上:unix、macOS和windows WSL。 nvm安装 &#xff01;&#xff01;重要&a…