Spring基于XML装配Bean

Bean 的装配可以理解为依赖关系注入,Bean 的装配方式也就是 Bean 的依赖注入方式。Spring 容器支持多种形式的 Bean 的装配方式,如基于 XML 的 Bean 装配、基于 Annotation 的 Bean 装配和自动装配等。

Spring 基于 XML 的装配通常采用两种实现方式,即设值注入(Setter Injection)和构造注入(Constructor Injection)。

在 Spring 实例化 Bean 的过程中,首先会调用默认的构造方法实例化 Bean 对象,然后通过 Java 的反射机制调用 setXxx() 方法进行属性的注入。因此,设值注入要求一个 Bean 的对应类必须满足以下两点要求。

	必须提供一个默认的无参构造方法。必须为需要注入的属性提供对应的 setter 方法。

使用设值注入时,在 Spring 配置文件中,需要使用 元素的子元素 元素为每个属性注入值。而使用构造注入时,在配置文件中,主要使用 标签定义构造方法的参数,可以使用其 value 属性(或子元素)设置该参数的值。
示例基于 XML 方式的 Bean 的装配。
1. 创建 Person 类
在项目 spring中的 src 目录下,创建一个名称为 com.zsh 的包,在该包下创建一个 Person 类,如下所示。

package com.zsh;public class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}// 重写toString()方法public String toString() {return "Person[name=" + name + ",age=" + age + "]";}// 默认无参的构造方法public Person() {super();}// 有参的构造方法public Person(String name, int age) {super();this.name = name;this.age = age;}
}

上述代码中,定义了 name 和 age 两个属性,并为其提供了 getter 和 setter 方法,由于要使用构造注入,所以需要提供有参的构造方法。为了能更清楚地看到输出结果,这里还重写了 toString() 方法。

2. 创建 Spring 配置文件
在 com.zsh 包下创建一个名为 applicationContext.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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsd"><!-- 使用设值注入方式装配Person实例 --><bean id="person1" class="zsh.Person"><property name="name" value="zhangsan" /><property name="age" value="20" /></bean><!-- 使用构造方法装配Person实例 --><bean id="person2" class="com.zsh.Person"><constructor-arg index="0" value="lisi" /><constructor-arg index="1" value="21" /></bean>
</beans>

上述代码中,首先使用了设值注入方式装配 Person 类的实例,其中 子元素用于调用 Bean 实例中的 setXxx() 方法完成属性赋值。然后使用了构造方式装配了 Person 类的实例,其中 元素用于定义构造方法的参数,其属性 index 表示其索引(从 0 开始),value 属性用于设置注入的值。

3. 创建测试类
在 com.zsh包下创建一个名称为 XmlBeanAssemblyTest 的测试类,编辑后如下所示。

package com.zsh;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class XmlBeanAssemblyTest {@Testpublic void test() {// 定义Spring配置文件路径String xmlPath = "com/zsh/applicationContext.xml";// 初始化Spring容器,加载配置文件,并对bean进行实例化ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);// 设值方式输出结果System.out.println(applicationContext.getBean("person1"));// 构造方式输出结果System.out.println(applicationContext.getBean("person2"));}
}

上述代码中,分别获取并输出了 id 为 person1 和 person2 的实例。
4. 运行项目并查看结果
使用 JUnit 测试运行 test() 方法,运行成功后,控制台的输出结果如下图所示。

在这里插入图片描述

从输出结果中可以看出,使用设值注入和构造注入两种方式都成功装配了 Person 实例。

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

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

相关文章

苹果php环境,苹果电脑安装PHP环境步骤-PHP问题

苹果电脑装置PHP环境步骤&#xff1a;一、起首咱们需求装置Homebrew二、终端输出饬令// 创立目次,假如你不创立过该目次sudo mkdir /usr/local/varsudo chmod 777 /usr/local/var//修正成你本人的用户名以及组,假如你不创立过该目次sudo mkdir /usr/local/sbin/sudo chown -R :…

python邮件图片加密软件_用Python发一封图文并茂的邮件

最近使用了不少通讯工具的接口, 比如企业微信机器人&#xff0c;钉钉&#xff0c;微信公众号的接口(未认证的订阅公众号)&#xff0c;相对于邮件来说&#xff0c;它们的表现形式太弱。比如没有更丰富的版本方式。当然了&#xff0c;并不是说表现形式越棒就是约好的通知手段&…

Spring基于Annotation装配Bean

在 Spring 中&#xff0c;尽管使用 XML 配置文件可以实现 Bean 的装配工作&#xff0c;但如果应用中 Bean 的数量较多&#xff0c;会导致 XML 配置文件过于臃肿&#xff0c;从而给维护和升级带来一定的困难。 Java 从 JDK 5.0 以后&#xff0c;提供了 Annotation&#xff08;注…

用java写米与英尺,JAVA 英制变换(英尺与英寸)

JAVA 英制转换(英尺与英寸)系统实际业务中&#xff0c;还有些外国船舶水尺用的英制计算单位。写了一个简单的 英尺与英寸的转换 。英尺 --> 英寸 的转换&#xff1a;public class FeetToInch {/*** param args*/public static void main(String[] args) {String aa FeetTo…

swiper鼠标hover停止自动轮播_swiper滑块组件

相信大家在平常购物的时候都会看到轮播图&#xff0c;轮播图里面播放的是热门商品的信息。在小程序里面我们可以通过swiper滑动视图容器组件来实现&#xff0c;让我们一起来看下swiper组件都有哪些属性&#xff1a;我们看到可以通过一些属性给视图容器增加一些指示点&#xff0…

Spring自动装配Bean

除了使用 XML 和 Annotation 的方式装配 Bean 以外&#xff0c;还有一种常用的装配方式——自动装配。自动装配就是指 Spring 容器可以自动装配&#xff08;autowire&#xff09;相互协作的 Bean 之间的关联关系&#xff0c;将一个 Bean 注入其他 Bean 的 Property 中。 要使用…

Spring AOP是什么?

面向切面编程&#xff08;AOP&#xff09;和面向对象编程&#xff08;OOP&#xff09;类似&#xff0c;也是一种编程模式。Spring AOP 是基于 AOP 编程模式的一个框架&#xff0c;它的使用有效减少了系统间的重复代码&#xff0c;达到了模块间的松耦合目的。 AOP 的全称是“As…

java算法概述,Java数据结构与算法基础(一)概述与线性结构

Java数据结构与算法基础(二)递归算法Java数据结构与算法基础(一)概述与线性结构学习目的&#xff1a;为了能更顺畅的读很多底层API代码和拓宽解决问题的思路一、数据结构概述1.数据结构是什么&#xff1f;数据与数据之间的关系2.数据结构的分类&#xff1a;存储结构分类&#x…

kmeans python自定义初始聚类中心_机器学习-KMeans聚类 K值以及初始类簇中心点的选取...

本文主要基于Anand Rajaraman和Jeffrey David Ullman合著&#xff0c;王斌翻译的《大数据-互联网大规模数据挖掘与分布式处理》一书。KMeans算法是最常用的聚类算法&#xff0c;主要思想是:在给定K值和K个初始类簇中心点的情况下&#xff0c;把每个点(亦即数据记录)分到离其最近…

java鬼剑士觉醒,DNF新觉醒装扮,男鬼剑士帅气无比!

在DNF这个游戏中&#xff0c;时装作为游戏的一大氪点&#xff0c;相信这几天的奇迹缝纫机活动也让大家了解到了时装到底多么的烧钱&#xff01;而也因为这次的活动&#xff0c;时装可以说达到了饱和状态了&#xff0c;估计短时间之内魔盒里不会再出现追忆时装了&#xff01;虽然…

Spring JDK动态代理

JDK 动态代理是通过 JDK 中的 java.lang.reflect.Proxy 类实现的。下面通过具体的案例演示 JDK 动态代理的使用。 1. 创建项目 在 MyEclipse 中创建一个名称为 spring 的 Web 项目&#xff0c;将 Spring 支持和依赖的 JAR 包复制到 Web 项目的 WEB-INF/lib 目录中&#xff0c;…

澄海哪里学机器人编程_少年学机器人编程

​当今社会&#xff0c;唯有能者居之&#xff0c;说的是有技能在手的人可以立足于职场&#xff0c;格物斯坦表示&#xff1a;现代化的教育方式有很多&#xff0c;其中有一种机器人编程教育模式&#xff0c;青少年们学好了&#xff0c;以后中考、高考核就业比同龄人更有优势了。…

Spring CGLlB动态代理

JDK 动态代理使用起来非常简单&#xff0c;但是有一定的局限性&#xff0c;这是因为 JDK 动态代理必须要实现一个或多个接口&#xff0c;如果不希望实现接口&#xff0c;则可以使用 CGLIB 代理。 CGLIB&#xff08;Code Generation Library&#xff09;是一个高性能开源的代码…

更新fielddata为true_在pytorch中停止梯度流的若干办法,避免不必要模块的参数更新...

在pytorch中停止梯度流的若干办法&#xff0c;避免不必要模块的参数更新2020/4/11 FesianXu前言在现在的深度模型软件框架中&#xff0c;如TensorFlow和PyTorch等等&#xff0c;都是实现了自动求导机制的。在深度学习中&#xff0c;有时候我们需要对某些模块的梯度流进行精确地…

php 自动切图,前端工程师技能之photoshop巧用系列扩展篇自动切图

目录[1]初始设置 [2]自动切图前面的话随着photoshop版本的不断升级&#xff0c;软件本身增加了很多新的功能&#xff0c;也为切图工作增加了很多的便利。photoshop最新的版本新增了自动切图功能&#xff0c;本文将详细介绍photoshop的这个新功能初始设置当然首先还是要进行一些…

Spring通知类型及使用ProxyFactoryBean创建AOP代理

Spring 通知类型 通知&#xff08;Advice&#xff09;其实就是对目标切入点进行增强的内容&#xff0c;Spring AOP 为通知&#xff08;Advice&#xff09;提供了 org.aopalliance.aop.Advice 接口。 Spring 通知按照在目标类方法的连接点位置&#xff0c;可以分为以下五种类型…

matlab二维谐振子,基于有限差分法求解的二维谐振子的MATLAB程序如下。哪位大神能帮我做个注明啊,完全看不懂啊,,急...

基于有限差分法求解的二维谐振子的MATLAB程序如下。哪位大神能帮我做个注明啊&#xff0c;完全看不懂啊&#xff0c;&#xff0c;急0____丿呆呆丶2017.04.15浏览20次分享举报tic clc clear L20; W20; N20; M20; hxL/(2*N); hyW/(2*M); Szeros((2*M-1)*(2*N-1)); for m1:2*M-1 D…

typescript get方法_.NET手撸绘制TypeScript类图——上篇

.NET手撸绘制TypeScript类图——上篇近年来随着交互界面的精细化&#xff0c;TypeScript越来越流行&#xff0c;前端的设计也越来复杂&#xff0c;而类图正是用简单的箭头和方块&#xff0c;反映对象与对象之间关系/依赖的好方式。许多工具都能生成C#类图&#xff0c;有些工具也…

Spring使用AspectJ开发AOP

AspectJ 是一个基于 Java 语言的 AOP 框架&#xff0c;它扩展了 Java 语言。Spring 2.0 以后&#xff0c;新增了对 AspectJ 方式的支持&#xff0c;新版本的 Spring 框架&#xff0c;建议使用 AspectJ 方式开发 AOP。 使用 AspectJ 开发 AOP 通常有两种方式&#xff1a; 基于 …

unicode解码php,PHP解码unicode编码的中文字符

问题背景&#xff1a;晚上在抓取某网站数据&#xff0c;结果在数据包中发现了这么一串编码的数据&#xff1a;"......\u65b0\u6d6a\u5fae\u535a......如何解码unicode编码的字符&#xff1f;【好使】 - PHP网站开发 - 【开源与分享】每日最新博客在置顶博客之后解决方案&a…