Spring的Bean你了解吗

news2024/11/25 12:47:25

Bean的配置

Spring容器支持XML(常用)和Properties两种格式的配置文件

Spring中XML配置文件的根元素是,中包含了多个子元素,每个子元素定义了一个Bean,并描述了该Bean如何装配到Spring容器中

元素包含了多个属性以及子元素,常用属性及子元素如下所示

id

是一个Bean的唯一标识,Spring容器对Bean的配置、管理都有这个属性完成

name

Spring容器同样可以通过此属性对容器中的Bean进行配置和管理,name属性可以为Bean指定多个名称、每个名称之间用逗号或分号隔开

class

该属性制定了Bean的具体实现类,它必须是一个完整的类名,使用类的全限定名

scope

用来设定Bean实例的作用域

constructor-arg

元素的子元素,可以使用此元素传入构造参数进行实例化。

该元素的index属性指定构造参数的序号(从0开始),

type属性指定构造参数的类型,

参数值可以通过ref属性或value属性直接指定,也可以通过ref或value子元素指定

property

元素的子元素,用于调用Bean实例中的setter方法完成属性赋值,从而完成依赖注入。该元素的name属性指定Bean实例中的相应属性名。

ref属性或value属性指定参数值

ref

、等元素的属性或子元素,可以用于指定Bean工厂中某个Bean的实例引用

value

、等元素的属性或子元素。可以用于直接指定一个常量值

list

用于封装List或数组类型的依赖注入

set

用于封装Set类型属性的依赖注入

map

用于封装Map类型属性的依赖注入

entry

元素的子元素,用于设置一个键值对

注意:如果Bean中未指定id和name,Spring会将class值当作id

例子:

<?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="userDao" class="com.aqiuo.UserDaoImp" />
             
             
             <bean id="userService" class="com.aqiuo.UserServiceImp">
                 <property name="userDao" ref="userDao"></property>
             </bean>
            
</beans>

Bean的实例化

构造器实例化:

构造器实例化是指Spring容器通过Bean对应类中默认的的无参构造函数来实例化Bean。

静态工厂方式实例化:

开发者创建一个静态工厂方法来创建Bean的实例,其Bean配置的class属性所指定的不再是Bean实例的实现类,而是静态工厂类。同时,需要使用factory-method属性来指定所创建的静态工厂方法。

package com.aqiuo.Static_Factory;

public class Bean2 {
    

}

//静态工厂
public class MyBean2Factory {
    public static Bean2 createBean2() {
        return new Bean2();
    }
}
//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"> 
           
        //id还是bean的id class指定对应的工厂实现类 factory-method指定工厂方法
           <bean id="bean2" class="com.aqiuo.Static_Factory.MyBean2Factory" factory-method="createBean2">
                 
             </bean>
</beans>
//测试

实例工厂方式实例化

        采用直接创建Bean的实例,同时在配置文件中,需要的实例化Bean也不是通过class属性直接指向实例化类,而是通过factory-bean书性指向配置的实例工厂,然后使用factory-method属性指定使用工厂的哪个方法

       
public class MyBean3Factory {
    
    public MyBean3Factory() {
        System.out.println("Bean3工厂实例化...");
        
    }
    public Bean3 createBean3() {
        return new Bean3();
    }
}

       
       
       <!--实例工厂-->
        <bean id="myBean3Factory" class="com.aqiuo.Instance_factory.MyBean3Factory" scope="prototype">
        </bean>
        <!-- factory-bean指定配置的实例工厂  factory-method指定工厂的哪个方法 -->
           <bean id="bean3" factory-bean="myBean3Factory" factory-method="createBean3">
          </bean>

Bean的作用域

singleton(默认)

使用ta定义的Bean在Spring容器中将只有一个实例,无论多少个bean引用它都指向同一个对象

prototype

每次通过Spring容器获取的prototype定义的bean时,容器都创建一个新的Bean实例

request

在一次HTTP请求中,容器会返回Bena的同一个实例,不同Http请求会产生新的Bean,该Bean仅在当前HTTP Request内有效

session

在一次HTTPSession请求中,容器会返回Bena的同一个实例,不同Http请求会产生新的Bean。该Bean仅在当前HTTP Session内有效

globalSession

application

websocket

Bean的生命周期

Bean的装配方式:

xml配置

setter配置(先调用默 认无参构造函数实力化对象,然后通过反射方式调用setter方法注入属性)

要求:

Bean类必须有一个默认无参构造方法

Bean类必须为需要注入的属性提供对应的setter方法

构造器配置

要求:

Bean类必须有一个有参构造方法

       //setter注入
       <bean id="user1" class="com.aqiuo.User.User">
             <property name="username" value="冉雨珊"></property>
             <property name="password" value="张宇"></property>
             <property name="list">
                 <list>
                 <value>1</value>
                 <value>2</value>
                 <value>3</value>
                 </list>
             </property>
         </bean>
         //构造器注入
         <bean id="user2" class="com.aqiuo.User.User">
             <constructor-arg index="0" value="rys"></constructor-arg>
             <constructor-arg index="1" value="zy"></constructor-arg>
             <constructor-arg index="2">
                 <list>
                     <value>qq</value>
                     <value>bb</value>
                     <value>mm</value>
                 </list>
             
             </constructor-arg>
             
         </bean>
         
         <bean id="student" class="com.orz.spring.bean.Student">
                 <property name="name" value="李华"/>
                 <property name="map">
                  <map>
                       <entry key="key1" value="数据库原理"/>
                       <entry key="key2" value="java编程"/>
                  </map>       
                  </property>
          </bean>

自动装配

元素的autowire属性

default

byName

byType

constructor

no

注解配置

注解

Component

此注解可以描述Spring中的bean,泛化的概念,仅仅表示一个组件(Bean)

Repository

用于将数据访问层(DAO层)的类标识为Spring中的bean

Service

通常作用在业务层(Service层),用于将业务层的类标识为Spring中的bean

Controller

通常作用在控制层,用于将控制层的类标识为Spring中的Bean

Autowired

用于对bean的属性变量、属性的setter方法及构造方法进行标注,配合对应的注解处理器完成Bean的自动配置工作

Resource

默认按照Bean实例名称进行装配,name解析为bean名称,type属性解析为Bean实例类型

Qualifier

与@Autowired注解配合使用,会将默认按Bean类型装配修改为按Bean实例名称装配。

注意:Spring 4.0以上版本使用上面的代码对指定包中注解进行扫描前,需要先向项目中导入SpringAOP的jar包,否则会爆出错误

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
         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 
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd " > 
          
         扫描包下的注解
         <context:component-scan base-package="com.aqiuo.annotation.*" /> 
       
   
</beans>

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

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

相关文章

变分贝叶斯近似

马尔可夫链蒙特卡洛方法&#xff08;MCMC&#xff09;是一个非常有用和重要的工具&#xff0c;但在用于估计大型数据集的复杂后验分布或模型时可能会遇到困难。变分近似&#xff08;variational approximations&#xff09;或变分推断&#xff08;variational inference&#x…

搅拌站erp系统|从单站到集团公司,不同规模搅拌站如何选择ERP?

搅拌站在采购ERP时经常感到困惑&#xff1a;市场上ERP这么多&#xff0c;功能看上去也大同小异&#xff0c;到底应该怎么选择&#xff1f; 其实&#xff0c;不同规模的搅拌站&#xff0c;所处的发展阶段不同&#xff0c;工作流程不同&#xff0c;在选择ERP过程中需要考量的维度…

VIOOVI干货分享:生产标准工时的计算与观测次数确认

在制造业中&#xff0c;生产标准工时是一个关键指标&#xff0c;它可以帮助企业确定生产效率、评估员工绩效以及优化生产流程。本文将介绍生产标准工时的计算方法&#xff0c;并探讨如何确认观测次数&#xff0c;以充分利用ECRS工时分析软件。 一、生产标准工时的计算 生产标准…

Vue - 实现文件导出文件保存下载

1 文件导出&#xff1a;使用XLSX插件 需求背景&#xff1a;纯前端导出&#xff0c;如 在前端页面勾选部分表格数据&#xff0c;点击"导出"按钮导出Excel文件。 实现思路&#xff1a; 1.通过XLSX插件的 XLSX.utils.book_new()方法&#xff0c;创建excel工作蒲对象wb…

计量经济学|学习笔记以及学习感悟

初级计量经济学着重于介绍基本的统计工具和经济模型&#xff0c;以帮助理解经济数据和经济现象之间的关系。它包括回归分析、假设检验和预测方法等内容。中级计量经济学则深入研究这些方法的理论基础和实际应用&#xff0c;包括更复杂的模型和技术&#xff0c;如面板数据分析、…

【C语言】数据结构——排序二(快排)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;数组打印与交换1. 交换排序1.1 基本思想&#xff1a;1.2 冒泡与快排的异同 2. 冒泡排序2.1 基本思想2.2 …

【模型】模型量化技术:动态范围、全整数和Float16量化

目录 一 动态范围量化 二 全整数量化 三 float16量化 通常&#xff0c;表示神经网络的数据类型是32位浮点数&#xff08;float32&#xff09;&#xff0c;这种数据类型可以提供高精度的计算&#xff0c;但是在计算资源和存储空间有限的设备上运行神经网络时&#xff0c;会带…

小型内衣洗衣机什么牌子好?口碑好的小型洗衣机

想必大家都知道&#xff0c;我们的内衣裤、袜子这些衣物对卫生方面的要求是比较的高&#xff0c;毕竟是贴身的衣物&#xff0c;因此是要分开清洗的&#xff0c;而不能够跟我们其他的大件衣服一起放入到大型洗衣机里进行混洗&#xff0c;很多就选择了分开单独的手洗&#xff0c;…

【Python排序算法系列】—— 冒泡排序

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 冒泡排序 过程演示&#xff1a; 冒泡排序实现代码&#xff1a; 分析冒泡排序&#xff1a; P…

车载毫米波雷达及芯片新趋势研究2--“CMOS+AiP+SoC”与4D毫米波雷达推动产业越过大规模发展临界点

2.1 MMIC芯片工艺发展至CMOS时代&#xff0c;芯片集成度更高、体积与成本下降  MMIC芯片工艺经GaAs、SiGe已发展至CMOS时代&#xff0c;CMOS MMIC具有更低成本、更高集成度的优势。 工艺的主要变化发生在MMIC芯片的射频材料部分&#xff0c;目前SiGe仍为主流工艺。 SiGe虽在…

c# label 自定义行间距

label 添加 Paint 事件。用"\n" 段落换行 private void label2_Paint(object sender, PaintEventArgs e){int LineDistance 8;//行间距System.Windows.Forms.Label label sender as System.Windows.Forms.Label;System.Drawing.Font drawFont label.Font;label.Au…

Tips:电池电源电压转换为220V

今天在进行操作的时候&#xff0c;看到一个新的东西&#xff0c;就是如何普通的电瓶电压转化为220V交流电。 当在室外或者工作地距离电源比较远的情况下&#xff0c;一般是选取拉线的方式进行采电&#xff0c;但是当距离电源过远&#xff0c;使用拉线的方式就不可用了。如何在…

【Vue2+3入门到实战】(9)Vue基础之组件的三大组成部分(结构/样式/逻辑) 详细示例

目录 一、学习目标1.组件的三大组成部分&#xff08;结构/样式/逻辑&#xff09; 二、scoped解决样式冲突**1.默认情况**&#xff1a;2.代码演示3.scoped原理4.总结 三、data必须是一个函数1、data为什么要写成函数2.代码演示3.总结 一、学习目标 1.组件的三大组成部分&#x…

ksuser.dll文件缺失怎么办?软件或游戏无法启动,一键自动修复

很多小伙伴反馈&#xff0c;自己的电脑中了病毒&#xff0c;被杀毒软件清理后&#xff0c;在打开游戏或软件的时候&#xff0c;经常会报错“提示无法找到ksuser.dll文件&#xff0c;建议重新安装软件或游戏”。自己根据提示重装后&#xff0c;还是报错&#xff0c;不知道应该怎…

php学习05-常量

常量可以理解为值不变的量。常量值被定义后&#xff0c;在脚本的其他任何地方都不能改变。一个常量由英文字母、下划线和数字组成&#xff0c;但数字不能作为首字母出现。 在PHP中使用define()函数来定义常量&#xff0c;该函数的语法格式如下&#xff1a; define(string cons…

[SWPUCTF 2021 新生赛]error

[SWPUCTF 2021 新生赛]error wp 信息搜集 查看页面&#xff1a; 输个单引号会报错&#xff1a; 显然是 SQL 注入。 提示看看有没有什么捷径&#xff0c;你要说捷径的话&#xff0c;sqlmap&#xff1f;你不说我也会用 sqlmap 先跑一下&#xff0c;哈哈。 sqlmap 的使用 先简…

基于优化的规划方法 - 数值优化基础 Frenet和笛卡尔的转换 问题建模 实现基于QP的路径优化算法

本文讲解基于优化的规划算法&#xff0c;将从以下几个维度讲解&#xff1a;数值优化基础、Frenet与Cartesian的相互转换、问题建模OSQP 1 数值优化基础 1.1 优化的概念 一般优化问题公式&#xff1a; f ( x ) f(x) f(x)&#xff1a;目标/成本函数 x x x&#xff1a;决策变…

Python圣诞树代码

Python圣诞树代码 # 小黄 2023/12/25import turtle as t # as就是取个别名&#xff0c;后续调用的t都是turtle from turtle import * import random as rn 100.0speed(20) # 定义速度 pensize(5) # 画笔宽度 screensize(800, 800, bgblack) # 定义背景颜色&#xff0c;可…

共建鸿蒙世界,信息流合作突破500家;程序员能入局吗?

12月28日&#xff0c;华为信息流在上海举办了创作者系列沙龙。HarmonyOS是面向万物互联全场景时代的智能终端操作系统&#xff0c;鸿蒙正致力于打造“一切皆服务&#xff0c;万物可分享”自主创新的移动应用生态。到目前为止&#xff0c;鸿蒙生态的设备数量已经超过7亿&#xf…

Spire.Office for Java 8.12.0

Spire.Office for Java 8.12.0 发布。在该版本中&#xff0c;Spire.XLS for Java支持检索使用WPS工具添加的嵌入图像&#xff1b;Spire.PDF for Java 增强了从 PDF 到 SVG、PDF/A1B 和 PDF/A2A 的转换。此外&#xff0c;该版本还修复了许多已知问题。下面列出了更多详细信息。 …