Spring 如何配置 bean (XML 方式)
请直接看原文:Spring 如何配置 bean (XML 方式)_spring 在哪配置bean 文件-CSDN博客
--------------------------------------------------------------------------------------------------------------------------------
Java Bean 如何配置配置到 spring 容器中
基于 XML 的配置
通过生成 applicationContext.xml 文件,声明命名空间来配置 Java Bean,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"xmlns:p="http://www.springframework.org/schema/p"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-4.0.xsd"> </beans>
如何配置 Java Bean ?,这里声明一个 Person 类、Car 类,并且生成 getter,setter 方法。
Person. java
package com.test.helloworld;public class Person {private String name;private String age;private Car car;public Car getCar() {return car;}public void setCar(Car car) {this.car = car;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public Person() {System.out.println("无参构造函数");}public Person(String name, String age, Car car) {super();this.name = name;this.age = age;this.car = car;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}}
Car.java
package com.test.helloworld;public class Car {private String brand;private Double price;public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}@Overridepublic String toString() {return "Car [brand=" + brand + ", price=" + price + "]";}}
依赖注入:属性注入
也就是 setter 注入,通过 setter 方法进行属性注入。
再 xml 文件的 beans 标签中添加 bean 标签,书写格式如下
<bean id="person" class="com.test.helloworld.Person"><property name="name" value="小明"></property><property name="age" value="20"></property><property name="car" ref="car1"></property></bean><bean id="car1" class="com.test.helloworld.Car"><property name="brand" value="BMW"></property><property name="price" value="350000"></property></bean>
其中:
bean : 表示配置一个 bean,这个 bean 会在 IOC 容器启动的时候,被 IOC 容器加载(实例化),并且在 IOC 容器中管理这个 bean
-
id : bean的名称,是一个唯一的名称
-
class : 这个bean对应的类型的全类名
-
property : 这个标签表示给 IOC 容器中管理的这个 bean 设置属性
- name : 属性名 ( 对应的是JavaBean风格的属性名 , 也就是 setter 方法 )
- value 或者 value 标签 : 需要设置的属性值
- ref 或者 ref 标签 :表示引用其他的bean
依赖注入:构造注入
我们的字段可以采用有参构造函数初始化,可以通过构造函数注入
<bean id="person" class="com.test.helloworld.Person"><constructor-arg value="小王"></constructor-arg><constructor-arg value="18"></constructor-arg><constructor-arg ref="car1"></constructor-arg></bean><bean id="car1" class="com.test.helloworld.Car"><property name="brand" value="BMW"></property><property name="price" value="350000"></property></bean>
参数顺序
这里是按照参数的顺序, 我们也可以通过设置添加 index 属性来设置参数顺序。
<bean id="person" class="com.test.helloworld.Person"><constructor-arg value="18" index="0" ></constructor-arg><constructor-arg value="小王" index="1"></constructor-arg><constructor-arg ref="car1" index="3"></constructor-arg></bean><bean id="car1" class="com.test.helloworld.Car"><property name="brand" value="BMW"></property><property name="price" value="350000"></property></bean>
- index : 通过 index 属性可以设置构造注入传入参数的顺序,从 0 开始到参数个数 -1 结束
参数类型
还可以通过设置参数(添加 type 属性)的类型,来匹配相应的构造函数,实例化对象。
<bean id="person" class="com.test.helloworld.Person"><constructor-arg value="18" index="0" type="java.lang.String" ></constructor-arg><constructor-arg value="小王" index="1" type="java.lang.String"></constructor-arg><constructor-arg ref="car1" index="3"></constructor-arg></bean><bean id="car1" class="com.test.helloworld.Car"><property name="brand" value="BMW"></property><property name="price" value="350000"></property></bean>
最后
通过生成 ApplicationContext 对象(IOC 容器)来获得 bean 对象。
1 启动 SpringIOC 容器ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//2 从 IOC 容器中获取 beanPerson person = (Person)applicationContext.getBean("person");//2 使用 beanSystem.out.println(person);
其中,XML 文件现在我的是放在 src 的一级目录下。
--------------------------------------------------------------------------------------------------------------------------------
相关文章:
Spring 如何配置 bean (XML 方式)
请直接看原文:Spring 如何配置 bean (XML 方式)_spring 在哪配置bean 文件-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- Java Bean 如何配置配置到 spring 容器中 基于 XM…...
揭秘外观模式:简化复杂系统的关键设计策略
前言 外观模式(Facade Pattern)是一种结构型设计模式,它隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类…...
Nginx 命令(Ubuntu)
常用命令: 1.查看错误日志: sudo vim /var/log/nginx/error.log 2.重新加载 nignx sudo systemctl reload nginx 3.立即停止Nginx服务。如果Nginx正在运行,它将被终止 sudo systemctl stop nginx 4. 禁止Nginx服务在系统重启时自动启…...
从github上拉取项目到pycharm中
有两种方法,方法一较为简单,方法二用到了git bash,推荐方法一 目录 有两种方法,方法一较为简单,方法二用到了git bash,推荐方法一方法一:方法二: 方法一: 在github上复制…...
python从入门到精通(十八):python爬虫的练习案列集合
python爬虫的练习 1.爬取天气网的北京城市历史天气数据1.1 第一种使用面向对象OOP编写爬虫1.2 第二种使用面向过程函数编写爬虫 1.爬取天气网的北京城市历史天气数据 1.1 第一种使用面向对象OOP编写爬虫 import re import requests from bs4 import BeautifulSoup import xlw…...
2.12作业
第一题:段错误。 第二题:hello world 第三题:hello 第四题:world 第五题: a: int a; b: int*a; c: int a0;int *p&a;int **q&p; d: int a[10]; e: int *a[10]; …...
树莓派4B(Raspberry Pi 4B) 使用docker搭建单机版nacos
树莓派4B(Raspberry Pi 4B) 使用docker搭建单机版nacos ⚠️ 由于树莓派上的芯片是ARM架构,而官方推出的docker镜像不适用于ARM架构,所以想用树莓派搭建最新版的Nacos服务的小伙伴们可以忽略我这篇文章了。本文基于nacos 2.0.4&am…...
C++入门学习(二十七)跳转语句—continue语句
当在循环中遇到continue语句时,它会跳过当前迭代剩余的代码块,并立即开始下一次迭代。这意味着continue语句用于跳过循环中特定的执行步骤,而不是完全终止循环。 直接看一下下面的代码更清晰: 与上一节的break语句可以做一下对比…...
JPEG图像格式加速神经网络训练--使用DCT训练CNN
JPEG图像格式加速神经网络训练 JPEG图像格式加速神经网络训练工作原理DCT系数与JPEG直接利用DCT系数阶段 1: 数据准备步骤 1: 读取JPEG文件结构步骤 2: 提取量化表和Huffman表步骤 3: 解析图像数据步骤 4: 反量化步骤 5: 获取DCT系数 阶段 2: 输入处理预处理 1: 正规化…...
【代码】Processing笔触手写板笔刷代码合集
代码来源于openprocessing,考虑到国内不是很好访问,我把我找到的比较好的搬运过来! 合集 参考:https://openprocessing.org/sketch/793375 https://github.com/SourceOf0-HTML/processing-p5.js/tree/master 这个可以体验6种笔触…...
Junit常用注解
注解是方法的“标签” 说明每个方法的“职责” Q:总共有那些注解? 参见官方的API文档 0.常用主机及其特点 BeforeClass 只会执行一次必须用static修饰常用来初始化测试需要的变量 Before 会执行多次(只要写一次)在每个Test执行执行之前执行可以和…...
【机器学习】支持向量机(SVM)
支持向量机(SVM) 1 背景信息 分类算法回顾 决策树 样本的属性非数值 目标函数是离散的 贝叶斯学习 样本的属性可以是数值或非数值目标函数是连续的(概率) K-近邻 样本是空间(例如欧氏空间)中的点目标函…...
C语言指针全解
1.什么是指针: 指针是存放地址的地方,是内存中最小单元的地址(编号),内存被分为一个个小的单元格,每一格有一个字节。比如说int a0;a会占据四个字节的大小,每个字节对应单元格都有自…...
rtt设备io框架面向对象学习-看门狗设备
1.看门狗设备基类 / components / drivers / include / drivers /下的watchdog.h 定义了如下看门狗设备基类 struct rt_watchdog_device { struct rt_device parent; const struct rt_watchdog_ops *ops; }; 看门狗设备基类的方法定义如下 struct rt_watchdog_ops { rt_err_…...
加固平板电脑丨三防智能平板丨工业加固平板丨智能城市管理
随着智能城市的不断发展,人们对于城市管理的要求也在不断提高,这就需要高效、智能的城市管理平台来实现。而三防平板就是一款可以满足这一需求的智能设备。 三防平板是一种集防水、防尘、防摔于一体的智能平板电脑,它可以在复杂的环境下稳定运…...
Redis的配置文件
目录 前言: 一、 Units 二、 INCLUDES 三、 NETWORK 3.1 bind 3.2 protected-mode 3.3 port 3.4 tcp-backlog 3.5 timeout 3.6 tcp-keepalive 3.7 示例演示 四、 GENERAL 4.1 daemonize 4.2 pidfile 4.3 loglevel 4.4 logfile 4.5 databases 五、…...
懒人精灵 之 Lua 捕获 json解析异常 ,造成的脚本停止.
Time: 2024年2月8日20:21:17 by:MemoryErHero 1 异常代码 Expected value but found T_END at character 12 异常代码 Expected value but found T_OBJ_END at character 223 处理方案 - 正确 json 示范 while true do--Expected value but found T_END at character 1--Ex…...
Python 列表操作详解
Python 是一种流行的编程语言,它以其简洁的语法和强大的功能而闻名。在 Python 中,列表是一种常用的数据结构,它可以包含任意类型的元素,并且可以随时添加或删除元素。在这篇文章中,我们将详细介绍 Python 列表的一些常…...
【Jenkins】Jenkins关闭Jenkins关闭、重启
目录 一、Jenkins关闭、重启 二、Jenkins服务的启动、停止方法。 一、Jenkins关闭、重启 1.关闭Jenkins 只需要在访问jenkins服务器的网址url地址后加上exit,关闭Jenkins服务。 例如:http://localhost:8081/exit 2.重启Jenkies 只有在Jenkins服务启动…...
【Linux】学习-动静态库
动静态库 头文件与库的区别 头文件一般而言,是声明和宏定义。头文件是在预处理阶段使用的 库文件是已经编译好的二进制代码。是一种目标文件,库文件是在链接阶段使用的 对于头文件和库我们可以这样理解,就是头文件提供的是一个函数的声明&…...
告别手动画图!用SUMO的netedit快速搭建高速公路交织区路网(附完整XML文件)
高速公路交织区建模实战:SUMO netedit高效操作指南与避坑手册 第一次打开SUMO的netedit时,面对密密麻麻的按钮和参数,大多数交通工程专业的学生都会感到无从下手。尤其是在处理高速公路交织区这类复杂道路结构时,传统的手动绘制方…...
革命性KVM管理工具Kimchi:HTML5界面快速部署虚拟机完整指南
革命性KVM管理工具Kimchi:HTML5界面快速部署虚拟机完整指南 【免费下载链接】kimchi An HTML5 management interface for KVM guests 项目地址: https://gitcode.com/gh_mirrors/ki/kimchi 你是否还在为复杂的KVM虚拟机管理而烦恼?想要一个直观易…...
AnalogPin库:Arduino模拟信号抗噪与平滑处理实战指南
1. AnalogPin 库概述:面向嵌入式系统的模拟信号抗噪与平滑处理框架AnalogPin 是一个专为 Arduino 平台设计的轻量级 C 类库,其核心目标并非简单封装analogRead(),而是构建一套可配置、可扩展、硬件感知的模拟输入信号调理机制。在工业传感、电…...
Qwen3-ASR-0.6B企业应用:呼叫中心实时转录+方言识别生产环境实践
Qwen3-ASR-0.6B企业应用:呼叫中心实时转录方言识别生产环境实践 1. 项目背景与价值 在现代企业客服场景中,语音通话仍然是客户沟通的主要方式。传统的呼叫中心面临着一个普遍痛点:大量通话内容需要人工记录和整理,不仅效率低下&…...
PCB开窗技术:设计要点与工程应用解析
PCB开窗技术详解:设计要点与工程应用1. PCB开窗基础概念1.1 开窗的定义与物理特性PCB开窗是指去除印刷电路板导线表面阻焊油墨层的工艺处理,使底层铜箔直接暴露。在标准PCB制造流程中,所有信号走线默认覆盖阻焊层(Solder Mask&…...
InnoDB的“身体结构”:页、Buffer Pool与Redo Log的底层奥秘
欢迎来到MySQL InnoDB存储引擎的“解剖室”;很多人每天都在写SQL,却从未见过数据在磁盘上真正的模样。当面试官问:“为什么InnoDB比MyISAM快?”或者“数据库宕机了,数据是怎么恢复的?”如果你只能回答“因为…...
GLM-4V-9B开源模型部署教程:4-bit量化+Streamlit+消费级GPU全适配
GLM-4V-9B开源模型部署教程:4-bit量化Streamlit消费级GPU全适配 你是不是也遇到过这样的困扰:想本地跑一个真正能看图说话的多模态大模型,结果发现显存不够、环境报错、图片上传后模型乱输出,甚至直接卡死?官方Demo看…...
ROS小车仿真进阶:手把手教你用URDF和Xacro为阿克曼转向车‘造轮子’
ROS阿克曼转向车仿真实战:从URDF建模到Gazebo调试全解析 当你在Gazebo中第一次看到自己搭建的阿克曼转向车完美执行转弯指令时,那种成就感堪比看着孩子学会骑自行车。作为ROS开发者,掌握URDF/Xacro建模技术就像获得了一把打开机器人世界的万能…...
3步搞定专业电路图绘制:Draw.io ECE插件让电子工程设计变得简单高效
3步搞定专业电路图绘制:Draw.io ECE插件让电子工程设计变得简单高效 【免费下载链接】Draw-io-ECE Custom-made draw.io-shapes - in the form of an importable library - for drawing circuits and conceptual drawings in draw.io. 项目地址: https://gitcode.…...
避坑指南:STM32CubeMX配置TouchGFX时,LTDC时钟与SDRAM地址那些容易出错的地方
STM32CubeMX与TouchGFX深度调优:LTDC时钟与SDRAM地址的工程实践 当你在深夜调试STM32F429的TouchGFX界面时,突然发现屏幕出现雪花般的噪点,或是触摸操作引发界面频繁闪烁——这种场景对嵌入式GUI开发者来说再熟悉不过。本文将带你深入LTDC时…...
