Spring项目创建与Bean的存储与读取(DL)

这篇具有很好参考价值的文章主要介绍了Spring项目创建与Bean的存储与读取(DL)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. Spring项目的创建

1. 创建Maven项目

第一步,创建 Maven 项目,Spring 也是基于 Maven 的。

Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

2. 配置国内源

由于国外源不稳定,可能让下面第二步引入 Spring 依赖会失败,所以这里先介绍如何一下配置国内镜像源。

Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean
现成的settings.xml文件链接:gitee

如果你已经有了settings.xml文件,但没有配置mirror,配置内容如下:

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

如果你是在引入相关依赖失败后进行的国内源配置,就要去本地管理jar包的目录将jar包都进行删除,然后重新刷新下载依赖即可。

Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

3. 添加spring依赖

第二步,在 Maven 项目中添加 Spring 的支持(spring-context, spring-beans)

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>

刷新等待加载完成。
Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

4. 创建启动类

第三步,创建启动类与main方法,用来做简单的测试

java 目录创建类,写代码即可,因为这里只演示怎么创建 Spring 项目和介绍 Spring 的简单使用,不会就上线发布,就不按照 Maven 的模板目录结构来搞了。

Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

二.储存或读取Bean对象

1. 添加spring配置文件

右键resources目录,新建一个spring-config.xml配置文件。
Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean
配置内容如下:

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

2. 创建Bean对象

第一步,创建Bean对象。
比如我们要注入一个Student对象,就先的创建一个Student类。

package com.tr.demo;

public class Student {
    public void sayHi(String name) {
        System.out.println("Hello!" + name );
    }
}

然后将Bean通过配置文件,注入到spring中,即在spring配置文件中通过以下语句注入。

<bean id="student" class="com.tr.demo.Student"></bean>

spring中对象的储存是通过键值对来存储的,其中keyidvaluebeanid一般使用小驼峰命名。

Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

3. 读取Bean对象

想要从 Spring 中将Bean对象读取出来,先要得到 Spring 上下文对象,相当于得到了 Spring 容器。

再通过 spring 上下文对象提供的方法获取到需要使用的Bean对象,最后就能使用Bean对象了。

ApplicationContext,也称为控制反转(IoC)容器,是 Spring 框架的核心。

实现类 描述
ClassPathXmlApplicationContext(常用) 加载类路径下的配置文件,要求配置文件必须在类路径下
FileSystemXmlApplicationContext 可以加载磁盘任意路径下的配置文件(必须要有访问权限)
AnnotationContigApplicationContext 用于读取注解创建容器
import com.tr.demo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class APP {
    public static void main(String[] args) {
        // 1. 得到上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        // 2. 获取 bean 对象,这里根据 id 获取
        Student student = (Student) context.getBean("student");
        // 3. 使用 bean 
        student.sayHi("张三");
    }
}

运行结果:

Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

还可以使用 Bean 工厂(旧)来获取 Bean。

import com.tr.demo.Student;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class APP2 {
    public static void main(String[] args) {
        // 1. 得到 bean 工厂
        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
        // 2. 获取 bean 对象
        Student student = (Student) factory.getBean("student");
        // 3. 使用 bean
        student.sayHi("李四");
    }
}

但实际上并不推荐使用这种方式,算是过时代的方式了,因为旧时期需要考虑内存占用的问题,而现在内存资源没有这样的问题了。

运行结果:

Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

此时我们可以发现,ApplicationContextBeanFactory都可以从容器中获取Bean,都提供了getBean方法,最终的效果是一样的。

🍂那么,ApplicationContextBeanFactory有什么区别?
🎯相同点:

  • 都是容器管理对象,都可以从容器中获取Bean,都提供了getBean方法。

🎯不同点:

  • ApplicationContextBeanFactory的子类, BeanFactory只提供了基础访问Bean对象的功能,而ApplicationContext除了拥有 BeanFactory的全部功能,还有其他额外功能的实现,如国际化,资源访问以及事务传播方面等功能的支持。
  • 它们两加载Bean的机制也是不同的,BeanFactory按需加载Bean,属于懒汉方式,使用它程序启动快,在后期获取对象时会慢一些;而ApplicationContext是饿汉方式,在创建时会将一次性将所有的Bean都加载,这种方式启动慢,启动之后获取对象就非常快了。

这里验证一下他们两的加载机制:
我们在 com.tr.demo 目录下再添加一个Teacher类,并完善TeacherStudent类的构造方法,这样当类被构造时会给出一些提示信息,在获取上下文或工厂时根据这些信息我们就可以知道Bean是否会被构造。

package com.tr.demo;

public class Teacher {
    public Teacher() {
        System.out.println("Teacher 已加载!");
    }
    public void sayHi(String name) {
        System.out.println("Hello!" + name );
    }
}

package com.tr.demo;

public class Student {
    public Student() {
        System.out.println("Student 已加载!");
    }
    public void sayHi(String name) {
        System.out.println("Hello!" + name );
    }
}

Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

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

public class APP3 {
    public static void main(String[] args) {
        // 1. 得到上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
    }
}

运行结果:

程序启动,ApplicationContext创建时,会将所有的Bean对象都构造,类似于饿汉的方式。
Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

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

public class APP4 {
    public static void main(String[] args) {
        // 1. 得到 bean 工厂
        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
    }
}

运行结果:

程序启动,在BeanFactory创建时,结果中没有如何输出,只要不去获取使用Bean就不会去加载,类似于懒汉的方式。

Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,beangetBean方法,其实是有三种使用方式的,具体如下:
1️⃣方式1:根据Bean的名字来获取

Student student = (Student) context.getBean("student");

这种方式返回的是一个Object对象,需要我们去进行强制类型转换。

2️⃣方式2:根据Bean类型获取

Student student = context.getBean(Student.class);

这种方式当beans中只有一个类的实例没有问题,但是个有多个同类的实例,会有问题,即在 Spring 中注入多个同一个类的对象,就会报错。

我们来试一下,首先在 Spring 配置文件,注入多个Student对象:
Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean
然后我们再通过这种方式来获取对象,运行结果如下:

抛出了一个NoUniqueBeanDefinitionException异常,这表示注入的对象不是唯一的。

Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

3️⃣方式3:根据名称 + 类型获取

Student student = context.getBean("student",Student.class);

相比方式1,更加健壮和优雅,也没有方式 2 中的问题

Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

总结

通篇下来涉及以下流程:

①创建 Spring 项目

②存储 Bean

  1. 先创建 Bean 对象
  2. 将 Bean 在 pring-config.xml 中进行配置

③取对象文章来源地址https://www.toymoban.com/news/detail-580857.html

  1. 得到 Spring 上下文,读取 Spring 配置文件
  2. 获取 Bean 对象
  3. 使用 Bean 对象(可选项)
    Spring项目创建与Bean的存储与读取(DL),JavaEE,spring,java,后端,国内源,bean

到了这里,关于Spring项目创建与Bean的存储与读取(DL)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring中Bean对象的存储与读取

    在项目的 pom.xml 中添加 Spring 支持 如何选定版本环境:打开官网,点击github图标 jdk8最后一个Spring版本是5.3.x,Spring6.0.x最低需要jdk17 版本冲突问题Maven自己处理 version : 可以选择带有 RELEASE结尾或者纯数字结尾,这样的版本更稳定 项目下创建一个main方法的启动类 存储 Bean 之前

    2024年01月24日
    浏览(37)
  • Spring更简单的存储和读取Bean对象

    目录 1.第一个Spring项目 2.存储Bean对象 2.1 准备工作 2.2 五大类注解 2.3 方法注解@Bean 2.4 Bean对象的默认命名规则 3. 读取Bean对象 3.1 属性注入 3.2 setter注入 3.3 构造方法注入 3.4 注入异常问题 3.5 注入方式优缺点 3.6 @Autowired和@Resource的区别 在学习更简单的方式来读取和存储Bean对象

    2024年02月03日
    浏览(51)
  • Spring(二):更简单的存储与读取 Bean

    通过上一章的Spring,我们基本实现了Spring 的读取与存储,但是在操作过程中,读取与存储并没有那么得“简单” 一套流程还是很复杂,所以,本章来介绍更加简单得读取与存储。 在 Spring 中想要更简单的存储和读取对象的核⼼是使⽤注解,也就是我们接下来要学习 Spring 中的

    2024年02月15日
    浏览(36)
  • 【JavaEE进阶】Spring 更简单的读取和存储对象

    配置扫描路径是使用注解之前的前置工作,是非常重要的,是必须的操作项.只有被配置的包下的所有类,添加了注解才能被正确的识别并保存到 Spring 中. 首先创建一个Spring项目.创建好后,第一步就是配置扫描路径:在 resources 目录中创建一个 spring-config.xml 文件.然后在 spring-config.

    2024年02月12日
    浏览(45)
  • 使用Spring的五大类注解读取和存储Bean

    目录 1.存储Bean对象的注解 1.1 五大类注解 1.2 方法注解 1.3添加注解的依赖 2.注解的使用 2.1  controller注解 2. 2Service注解  2.3.Resopsitory注解 2.4Component注解 2.5Configuration注解 2.6 注解之间的关系 3.方法注解 3.1 方法注解要配合类注解来使用。 3.2 重命名Bean 4.获取Bean对象(对象装配

    2024年02月01日
    浏览(43)
  • JavaEE 突击 5 - Spring 更简单的读取和存储对象(2)

    大家新年快乐 , 祝大家新的一年如图 这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架 JavaEE 进阶专栏 Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在 接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点 并且带领

    2024年02月19日
    浏览(53)
  • 【JavaEE】Spring Boot - 项目的创建和使用

    【JavaEE】Spring Boot 开发要点总结(1) Spring框架是为了简化Java程序的开发的,而Spring Boot框架则是为了简化Spring程序开发的 Spring Boot,也就是Spring 脚手架 现实中的脚手架是这样的: 通过这个脚手架,我们就可以更快速方便的盖房子,并且房子建得会更好 而Spring Boot,就是S

    2024年02月14日
    浏览(43)
  • JavaEE——Spring中存取Bean的注解

    目录 一、存储Bean对象 1、定义 2、存储方式 (1)、类注解 【1】、@Controller(控制器存储) 【2】、@Service(服务存储) 【3】、@Repository(仓库存储) 【4】、@Component(组件存储) 【5】、@Configuration(配置存储) (2)、方法注解@Bean 3、重命名Bean 二、获取Bean对象 1、注入关

    2024年02月16日
    浏览(34)
  • javaee spring配置文件bean标签详解

    bean标签中添加scope属性,设置bean对应对象生成规则. scope = “singleton” 单例,默认值,适用于实际开发中的绝大部分情况. scope=“prototype” 多例,适用于struts2中的action配置 注意: 只对单例有效,设置scope=\\\"singleton\\\"时测试 延时创建属性. lazy-init=“false” 默认值,不延迟创建,即在启动时

    2024年02月11日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包