Spring中的Bean相关理解

news2024/12/26 21:33:01

在Spring框架中,Bean是一个由Spring IoC容器实例化、配置和管理的对象。Bean是一个被Spring框架管理并且被应用程序各个部分所使用的对象。Spring IoC容器负责Bean的创建、初始化、依赖注入以及销毁等生命周期管理。

 注:喜欢的朋友可以关注公众号“JAVA学习课堂”系统学习相关技术,持续更新。

目录

1、Bean的配置

2.Bean的实例化


1、Bean的配置

Spring类似一个工厂,它的作用就是生产和管理容器中的Bean,Spring容器支持XML和Properties两种格式的配置文件,实际开发中通常使用XML的格式,来注册并管理Bean之间的依赖关系。

   <Bean>元素的常用属性和子元素

注:

在配置文件中,一个普通的bean只需要定义id或者name和class两个属性。


<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">  
  
    <bean id="myBean" class="com.example.MyBeanClass">  
        <!-- 注入其他Bean、设置属性值等 -->  
        <property name="someProperty" value="someValue"/>  
    </bean>  
    
      <!-- 使用id属性定义bean1,对应的实现类为com.itTest.Bean1 -->  
      <bean id="bean1" class="com.itTest.Bean1" />
      
       <!-- 使用name属性定义bean2,对应的实现类为com.itTest.Bean2 -->  
      <bean name="bean2" class="com.itTest.Bean21" />
</beans>

 

2.Bean的实例化

在程序中,要使用某个对象,就需要先实例化对象,在spring中,要使用容器中的bean,同样需要实例化bean。

实例化bean的三种方式:构造器实例化、静态工厂方式实例化、实例工厂方式。

构造器实例化:


public class Bean1 {
}

创建spring配置文件beans1.xml配置文件中定义id为bean1的bean 

 

 


<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"
>  
      <!-- 使用id属性定义bean1,对应的实现类为com.itTest.Bean1 -->  
      <bean id="bean1" class="com.itTest.Bean1" />
</beans>

创建测试类: 


public class InstanceTest1 {
    public static void main(string [] args) {
        //定义配置w摁键路径
        string  xmlPath = "xml的路径";
        ApplicationContext applicationContext = new ClassPathXMlApplicationContext(xmlPath);
        Bean1 bean = (Bean) applicationContext.getBean("bean1");
        system.out.println(bean);
    }
}

静态工厂方式实例化:该方法要求开发者创建一个静态工厂的方式来创建bean实例,在配置中class属性指定的不在是bean实例的实现类,而是静态工厂类。

创建一个bean2类:

 


public class Bean2 {
}

 创建MyBean2Factory类,在该类中创建一个静态方法来返回bean2的实例:

 


public class MyBean2Factory {  
  //使用自己的工厂创建Bean2实例
  public static Bean2 createBean(){
    return new Bean2();
  }
}

 

创建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-4.3.xsd">
    <bean id="bean2" 
            class="com.instance.static_factory.MyBean2Factory" 
       factory-method="createBean" />
</beans>

创建测试类:


public class InstanceTest2 {
  public static void main(String[] args) {
    // 定义配置文件路径
    String xmlPath = 
        "com/instance/static_factory/beans2.xml";
    // ApplicationContext在加载配置文件时,对Bean进行实例化
    ApplicationContext applicationContext = 
        new ClassPathXmlApplicationContext(xmlPath);
    System.out.println(applicationContext.getBean("bean2"));
  }
}

 

 

实例工厂方式实例化:该方法采用直接创建bean实例的方式,在配置文件中需要实例化的bean也不是通过class属性直接指向的实例化类,在通过factory-bean属性指向配置的实例工厂,使用factory-mentod属性确定使用工厂中的哪个方法

创建类对象:


public class MyBean3Factory {
  public MyBean3Factory() {
    System.out.println("bean3工厂实例化中");
  }
    //创建Bean3实例的方法
  public Bean3 createBean(){
    return new Bean3();
  }
}

创建Spring配置文件bean3.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
    <!-- 配置工厂 -->
    <bean id="myBean3Factory" 
            class="com.instance.factory.MyBean3Factory" />
    <!-- 使用factory-bean属性指向配置的实例工厂,
          使用factory-method属性确定使用工厂中的哪个方法-->
  <bean id="bean3" factory-bean="myBean3Factory" 
       factory-method="createBean" />
</beans>

 创建测试类:


public class InstanceTest3 {
  public static void main(String[] args) {
    // 指定配置文件路径
    String xmlPath = "com/instance/factory/beans3.xml";
    // ApplicationContext在加载配置文件时,对Bean进行实例化
    ApplicationContext applicationContext = 
        new ClassPathXmlApplicationContext(xmlPath);
    System.out.println(applicationContext.getBean("bean3"));
  }
}

 

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

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

相关文章

学习软考----数据库系统工程师25

关系规范化 1NF&#xff08;第一范式&#xff09; 2NF&#xff08;第二范式&#xff09; 3NF&#xff08;第三范式&#xff09; BCNF&#xff08;巴克斯范式&#xff09; 4NF&#xff08;第四范式&#xff09; 总结

茶多酚复合纳米纤维膜

茶多酚复合纳米纤维膜是一种结合了茶多酚与纳米纤维技术的创新材料。茶多酚作为茶叶中多酚类物质的总称&#xff0c;具有抗氧化、抗辐射、抗*等多种药理作用&#xff0c;是一种非常有益的天然物质。而纳米纤维膜则因其超细纤维结构、高比表面积和高孔隙率等特性&#xff0c;在过…

深度解读:Agent AI智能体如何重塑我们的现实和未来|TodayAI

​​​​​​​ 一、 引言 在当今时代&#xff0c;人工智能&#xff08;AI&#xff09;技术的快速发展正不断改变着我们的生活与工作方式。尤其是Agent AI智能体&#xff0c;作为AI技术中的一种重要形式&#xff0c;它们通过模拟人类智能行为来执行各种复杂任务&#xff0c;从…

基于51单片机的电子钟秒表LCD1602仿真设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机的电子钟秒表LCD1602仿真设计( proteus仿真程序设计报告原理图讲解视频&#xff09; 这里写目录标题 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单&&下载链接 仿真图proteus7.8及以上 程序…

pynq7020系列的资源有多少

pynq系列的资源有多少 对比 查找表107&#xff0c;273 39.14 140&#xff0c;537 51.28查找表随机存储器17&#xff0c;457 12.12 19&#xff0c;524 13.56触发器67&#xff0c;278 12.27 81&#xff0c;453 14.95 Block RAMs ( 36 KB ) 264.5 29.00 457 50.11 Table 1: Zynq-…

英语口语情景对话视频软件分享!

在当今全球化的时代&#xff0c;英语已成为一种通用的国际语言。为了提高英语口语能力&#xff0c;越来越多的人选择使用英语口语情景对话视频软件。本文将为您推荐几款备受欢迎的英语口语情景对话视频软件&#xff0c;帮助您轻松提高英语口语水平。 AI外语陪练 AI外语陪练软件…

计量校准使用测量不确定度具备什么意义?有哪些作用?

一些企业在收到校准报告/证书时&#xff0c;会看到证书之中有“测量不确定度”一栏&#xff0c;因此会有很多人咨询&#xff0c;什么是不确定度&#xff0c;它的作用是什么&#xff1f; 计量校准报告的不确定度 如果以书面形式理解的话&#xff0c;相信很多朋友都不明白不确定…

适合小白使用的编译器(c语言和Java编译器专属篇)

本节课主要讲如何安装适合编程小白的编译器 废话不多说&#xff0c;我们现在开始 c/c篇 首先&#xff0c;进入edge浏览器&#xff0c;在搜索框输入visual studio &#xff0c;找到带我画圈的图标&#xff0c;点击downloads 找到community版&#xff08;社区版&#xff09;的下…

什么是web3D?应用场景有哪些?如何实现web3D展示?

Web3D是一种将3D技术与网络技术完美结合的全新领域&#xff0c;它可以实现将数字化的3D模型直接在网络浏览器上运行&#xff0c;从而实现在线交互式的浏览和操作。 Web3D通过将多媒体技术、3D技术、信息网络技术、计算机技术等多种技术融合在一起&#xff0c;实现了它在网络上…

【JAVA |基础】运算符、程序逻辑控制以及方法的使用

目录 一、前言 二、操作符 1.算术运算符 2.赋值运算符 3.比较运算符 4.逻辑运算符 5.条件&#xff08;三目、三元&#xff09;运算符 6.位运算符(都是基于二进制来计算) 三、 程序逻辑控制 1.顺序结构 2.分支结构 if语句 Switch语句 3.循环结构 while语句 for循环…

【C++ 】二叉搜索树

文章目录 1. 二叉搜索树的概念2. 二叉搜索树的代码实现2.1 Find ( ) 查找的实现2.2 Insert () 插入的实现2.3 InOrder ( ) 中序遍历的实现2.4 Erase ( ) 删除的实现 3. 二叉搜索树的应用 1. 二叉搜索树的概念 &#x1f427;① 二叉搜索树(BST&#xff0c;Binary Search Tree)&a…

SQL注入基础-3

一、宽字节注入 1、宽字节&#xff1a;字符大小为两个及以上的字节&#xff0c;如GBK&#xff0c;GB2312编码 2、数据库使用GBK编码时&#xff0c;会将两个字符合并为一个汉字(宽字节)。特殊值字符如单引号都会被转义【--->\】&#xff0c;如sqli-lads第32关&#xff0c;输…

如果你作 为Java程序员曾经遭遇过NullPointerException,请举起手

如果你作 为Java程序员曾经遭遇过NullPointerException&#xff0c;请举起手 1.让Optional发光发热&#xff1a;去除代码中对null的检查&#xff0c; 采用防御式检查减少NullPointerException java8实战 书籍 第225页 免费下载链接&#xff1a; https://pan.quark.cn/s/5cf68…

HTML5+CSS3+JS小实例:旋转渐变光标

实例:旋转渐变光标 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale…

冲突:故事型游戏的燃料

在故事型游戏中&#xff0c;冲突是推动情节发展的关键因素。没有冲突&#xff0c;故事就会变得平淡无奇&#xff0c;缺乏吸引力。在这篇博客中&#xff0c;我将探讨冲突在故事型游戏中的重要性&#xff0c;以及如何利用冲突为游戏增色添彩。 首先&#xff0c;让我们来了解一下冲…

1688快速获取整店铺列表 采集接口php Python

在电子商务的浪潮中&#xff0c;1688平台作为中国领先的批发交易平台&#xff0c;为广大商家提供了一个展示和销售商品的广阔舞台&#xff1b;然而&#xff0c;要在众多店铺中脱颖而出&#xff0c;快速获取商品列表并进行有效营销是关键。 竞争对手分析 价格比较&#xff1a;…

市面上好用的AI工具有哪些?

市面上的AI工具数不胜数&#xff0c;选择合适自己的AI工具则需要考虑自己的需求&#xff0c;看是否能满足的使用需求。那么市面上又有哪些好用的AI工具呢&#xff1f; 泰迪智能科技拥有简单易用的大数据挖掘建模平台&#xff0c;能够让数据创造更大的价值。 功能板块&…

Spring Data JPA自定义Id生成策略、复合主键配置、Auditing使用

前言 在Spring Data JPA系列的第一篇文章 SpringBoot集成JPA及基本使用-CSDN博客 中讲解了实体类的Id生成策略可以通过GeneratedValue注解进行配置&#xff0c;该注解的strategy为GenerationType类型&#xff0c;GenerationType为枚举类&#xff0c;支持四种Id的生成策略&…

什么牌子的骨传导耳机质量好?五大宝藏热门机型测评对比!

我作为一名音乐发烧友&#xff0c;对各类耳机产品都有深入的了解&#xff0c;最近也经常被人问及骨传导耳机哪个牌子好。通过交流&#xff0c;我发现很多人在选择骨传导耳机的时候&#xff0c;都有出现踩坑的情况&#xff0c;这也难怪&#xff0c;随着骨传导耳机热度逐渐增加&a…

书生浦语训练营第2期-第7节笔记

一、为什么要研究大模型的评测&#xff1f; 首先&#xff0c;研究评测对于我们全面了解大型语言模型的优势和限制至关重要。尽管许多研究表明大型语言模型在多个通用任务上已经达到或超越了人类水平&#xff0c;但仍然存在质疑&#xff0c;即这些模型的能力是否只是对训练数据的…