Spring的Bean你了解吗

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.mzph.cn/news/584288.shtml

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

相关文章

python可视化界面自动生成,python如何做可视化界面

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python gui可视化操作界面制作&#xff0c;python做出的炫酷的可视化&#xff0c;现在让我们一起来看看吧&#xff01; 目录 前言 一.环境配置 插件&#xff1a; 1.python 2.Chinese 3.Open In Default Browser 安装pyt…

方案:智能分析网关V4区域人数超员AI算法模型的应用场景介绍

视频AI智能分析技术已经深入到人类生活的各个角落&#xff0c;与社会发展的方方面面紧密相连。从日常生活中的各种场景&#xff0c;如人脸识别、车牌识别&#xff0c;到工业生产中的安全监控&#xff0c;如工厂园区的翻越围栏识别、入侵识别、工地的安全帽识别、车间流水线产品…

MySQL 8.0 InnoDB Tablespaces之Undo Tablespaces(UNDO表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之Undo Tablespaces&#xff08;UNDO表空间&#xff09;Undo Tablespaces&#xff08;UNDO表空间&#xff09;默认UNDO表空间添加 Undo 表空间查看Undo 相关的信息查看Undo 相关参数变量查看Undo 状态信息通过information_schema.innodb_…

python使用watchdog监听文件变化并打包成docker镜像

文章目录 简介1.监听文件的代码2.获取依赖列表文件3.创建Dockerfile文件4.上传文件到服务器上5.构建容器并启动6.更新main.py代码操作 简介 最近用python帮公司写了一个监控目录下文件发生变化的插件&#xff0c;在打包成docker镜像的过程中出现了一些小问题&#xff0c;特意记…

Unity中Shader裁剪空间推导(透视相机到裁剪空间的转化矩阵)

文章目录 前言一、简单看一下 观察空间—>裁剪空间—>屏幕空间 的转化1、观察空间&#xff08;右手坐标系、透视相机&#xff09;2、裁剪空间&#xff08;左手坐标系、且转化为了齐次坐标&#xff09;3、屏幕空间&#xff08;把裁剪坐标归一化设置&#xff09;4、从观察空…

基于YOLOv8的遥感SAR舰船小目标识别

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文摘要&#xff1a;基于YOLOv8的遥感SAR舰船小目标&#xff0c;阐述了整个数据制作和训练可视化过程 1.YOLOv8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的…

【LangChain】与文档聊天:将OpenAI与LangChain集成的终极指南

欢迎来到人工智能的迷人世界&#xff0c;在那里&#xff0c;人与机器之间的通信越来越模糊。在这篇博客文章中&#xff0c;我们将探索人工智能驱动交互的一个令人兴奋的新前沿&#xff1a;与您的文本文档聊天&#xff01;借助OpenAI模型和创新的LangChain框架的强大组合&#x…

【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于FSRCNN的TPU平台超分辨率模型部署方案

2023 CCF 大数据与计算智能大赛 基于TPU平台实现超分辨率重建模型部署 基于FSRCNN的TPU平台超分辨率模型部署方案 WELL 刘渝 人工智能 研一 西安交通大学 中国-西安 1461003622qq.com 史政立 网络空间安全 研一 西安交通大学 中国-西安 1170774291qq.com 崔琳、张…

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

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

Element UI之el-tabs的样式修改字体颜色、下划线、选中/未选中

目录 默认样式 修改默认字体颜色&#xff1a; 修改鼠标悬浮/选中字体颜色&#xff1a; 去掉长分割线并修改下划线颜色 完整代码 默认样式 注意事项&#xff1a;一定要在 <style scoped>不然修改的样式不会覆盖生效 修改默认字体颜色&#xff1a; ::v-deep .el-tabs__…

[鹏城杯 2022]简单包含

[鹏城杯 2022]简单包含 wp 题目代码如下&#xff1a; <?php highlight_file(__FILE__); include($_POST["flag"]); //flag in /var/www/html/flag.php; 直接 POST 传参&#xff1a; flag/var/www/html/flag.php 会触发 waf 。 尝试用伪协议读取&#xff1a; …

canvas绘制红绿灯路口

无图不欢&#xff0c;先上图 使用方法&#xff08;以vue3为例&#xff09; <template><canvas class"lane" ref"laneCanvas"></canvas> </template><script setup> import { ref, onMounted } from vue import Lane from …

C实现数组奇数在前偶数在后排序

一、运行结果&#xff1b; 二、源码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现调整函数move_odd_even函数&#xff1b; void move_odd_even(int arr[], int sz) {//初始化变量值&#xff1b;int left 0;int right sz - 1;//循环判断和…

CSP CCF 201312-2 ISBN号码 C++满分题解

解题思路&#xff1a; 1.用一个int数组单独存储每个数字&#xff1b;用char数组存储原始标识符串&#xff0c;方便输出 2.计算后得到标识码&#xff0c;判断是否正确 #include<iostream> using namespace std;int main() {int num[15]; //存储每个位置的数char arr[15…

【高性能篇】QPS概念、RT概念

什么是QPS&#xff0c;什么是RT&#xff1f; ✔️典型解析✔️扩展知识仓✔️RT ✔️QPS✔️ QPS和TPS✔️并发用户数✔️最佳线程数 ✔️典型解析 QPS&#xff0c;指的是系统每秒能处理的请求数(Query Per Second)&#xff0c;在Web应用中我们更关注的是Web应用每秒能处理的re…

Radar System Pro - Plug Play Solution

Radar System Pro是一款功能多样且可定制的资源,旨在通过功能齐全且易于使用的雷达系统增强您的Unity项目。无论您是在开发第一人称射击游戏、策略游戏还是太空探索模拟器,我们的雷达系统都将为您提供所需的工具,以创建引人入胜且身临其境的体验。 雷达系统是一个模块化资产…

2023年华为OD机试(python)B卷-符合要求的结对方式

一、题目 题目描述&#xff1a; 用一个数组A代表程序员的工作能力&#xff0c;公司想通过结对编程的方式提高员工的能力&#xff0c;假设结对后的能力为两个员工的能力之和&#xff0c;求一共有多少种结对方式使结对后能力为N。 二、输入输出 输入描述: 5 1 2 2 2 3 4 第一行为…

Unity 贝塞尔曲线工具获取运动轨迹

Unity 贝塞尔曲线工具获取运动轨迹 一、介绍贝塞尔曲线二、Unity中贝塞尔曲线工具介绍1.创建一个空物体挂在上BezierSpline.cs脚本组件2.由上图可知刚创建出来的有两个点和两个手柄组成3.我们可修改其坐标看下效果4.这样我们就可以获得这两个点之间的指定数量的点来作为某个物体…

openGauss学习笔记-177 openGauss 数据库运维-逻辑复制-逻辑解码-逻辑解码概述

文章目录 openGauss学习笔记-177 openGauss 数据库运维-逻辑复制-逻辑解码-逻辑解码概述177.1 功能描述177.2 注意事项177.3 性能 openGauss学习笔记-177 openGauss 数据库运维-逻辑复制-逻辑解码-逻辑解码概述 177.1 功能描述 openGauss对数据复制能力的支持情况为&#xff…

资助26项!基金委公布一批原创探索项目资助结果!

根据《国家自然科学基金原创探索计划项目实施方案&#xff08;试行&#xff09;》要求&#xff0c;现将2023年度数理科学部资助的专项项目&#xff08;指南引导类原创探索计划项目&#xff09;相关信息予以公示&#xff1a; 国家自然科学基金委员会 数理科学部 2023年12月26日…