初学Spring之自动装配 Bean

Bean 的作用域:

1.单例模式(Spring 默认机制)

scope=“singleton”

2.原型模式:每次从容器中 get 时,都会产生一个新对象

scope="prototype"

3. request、session、application,只能在 web 开发中使用

Bean 的自动装配:

自动装配是 Spring 满足 bean 依赖的一种方式

Spring 会在上下文中自动寻找,并自动给 bean 装配属性

Spring 中有三种装配的方式:

1.在 xml 中显示配置

2.在 java 中显示配置

3.隐式的自动装配 bean

写两个类

写个 Person 类,get/set 方法,toString() 方法

package com.demo.autowired;public class Person {private Cat cat;private Dog dog;private String name;public Cat getCat() {return cat;}public void setCat(Cat cat) {this.cat = cat;}public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Person{" +"cat=" + cat +", dog=" + dog +", name='" + name + '\'' +'}';}
}

beans.xml 文件:

ByName 自动装配:autowire="byName"

会自动在容器上下文中查找和自己对象 set 方法后面的值对应的 bean 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"xmlns:p="http://www.springframework.org/schema/p"xmlns:c="http://www.springframework.org/schema/c"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"><bean id="cat" class="com.demo.autowired.Cat"/><bean id="dog" class="com.demo.autowired.Dog"/><!-- byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的bean id --><bean id="person" class="com.demo.autowired.Person" autowire="byName">
<!--        <property name="cat" ref="cat"/>-->
<!--        <property name="dog" ref="dog"/>--><property name="name" value="张三"/></bean>
</beans>

MyTest 类:

import com.demo.autowired.Person;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Mytest {@Testpublic void test(){ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");Person person = context.getBean("person", Person.class);person.getCat().shout();person.getDog().shout();}
}

同理,ByType:会自动在容器上下文中查找和自己对象属性类型相同的 bean

(Cat、Dog 的 id 都可以省略)

<bean class="com.demo.autowired.Cat"/>
<bean class="com.demo.autowired.Dog"/>
<!-- byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean -->
<bean id="person" class="com.demo.autowired.Person" autowire="byType"><property name="name" value="张三"/>
</bean>

总结:

byName 需要保证所有 bean 的 id 唯一,并且这个 bean 需要和自动注入的属性的 set 方法值一致

byType 需要保证所有 bean 的 class 唯一,并且这个 bean 需要和自动注入的属性的类型一致

注解实现自动装配:

Person 类添加 @Autowired 注解(在属性上使用或者在 Set 方法上使用)

beans.xml 文件:

导入 context 约束:xmlns:context="http://www.springframework.org/schema/context"

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

配置注解的支持:<context:annotation-config/>

<?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:c="http://www.springframework.org/schema/c"xmlns:context="http://www.springframework.org/schema/context"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/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-4.0.xsd"><!-- 开启注解的支持 --><context:annotation-config/><bean id="cat" class="com.demo.autowired.Cat"/><bean id="dog" class="com.demo.autowired.Dog"/><bean id="person" class="com.demo.autowired.Person"><property name="name" value="张三"/></bean></beans>

如果显示定义了 Autowired 的 required 属性为 false,说明这个对象可以为 null,否则不允许为空

@Nullable 字段标记了这个注解,说明这个字段可以为 null

@Qualifier(value="xx") 可以指定唯一的 bean 对象注入(需和 @Autowired 搭配使用)

@Resource 和 @Autowired 的区别:

1.都是用来自动装配的,都可以放在属性字段上

2. @Autowired 通过 byType 方式实现,这个对象是必须存在的

3. @Resource 默认通过 byName 方式实现,如果找不到,则通过 byType 方式实现

如果二者都找不到,就报错

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

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

相关文章

腾讯云COS分布式对象存储

腾讯云COS分布式对象存储 腾讯云对象存储&#xff08;Cloud Object Storage&#xff0c;COS&#xff09;是腾讯云提供的一种用于存储海量文件的分布式存储服务。 腾讯云 COS 适用于多种场景&#xff0c;如静态网站托管、大规模数据备份和归档、多媒体存储和处理、移动应用数据存…

Camtasia 2024新功能 Camtasia2024更新介绍:AI剪辑助力微课制作 Camtasia2024密钥 Camtasia2023免费升级更新

Camtasia 是一款功能强大的屏幕录制和视频编辑软件&#xff0c;广泛应用于教育、商业和娱乐领域。无论是创建教学视频、产品演示、教程还是营销内容&#xff0c;Camtasia都能提供专业的工具和功能&#xff0c;帮助用户制作高质量的视频内容。 Camtasia 2024 中文免费安装包百度…

暑假学习DevEco Studio第2天

学习目标&#xff1a; 掌握页面跳转 学习内容&#xff1a; 跳转页面 创建页面&#xff1a; 在“project”窗口。打开“entry>src>main>ets”,右击“pages”&#xff0c;选择“New>ArkTS File”,命名“Second”&#xff0c;点击回车键。 在页面的路由&#xff0…

昇思25天学习打卡营第16天|文本解码原理——以MindNLP为例

在大模型中&#xff0c;文本解码通常是指在自然语言处理&#xff08;NLP&#xff09;任务中使用的大型神经网络模型&#xff08;如Transformer架构的模型&#xff09;将编码后的文本数据转换回可读的原始文本的过程。这些模型在处理自然语言时&#xff0c;首先将输入文本&#…

vienna整流器过零畸变原因分析

Vienna整流器是一种常见的三电平功率因数校正&#xff08;PFC&#xff09;整流器&#xff0c;广泛应用于电源和电能质量控制领域。由于其高效率、高功率密度和低谐波失真的特点&#xff0c;Vienna整流器在工业和电力电子应用中具有重要地位。然而&#xff0c;在实际应用中&…

Playwright之录制脚本转Page Object类

Playwright之录制脚本转Page Object类 设计思路 &#xff1a; 我们今天UI自动化设计的时候&#xff0c;通常会遵循一些设计模式&#xff0c;例如Page Object模式。但是自己找元素再去填写有一些麻烦&#xff0c;所以我们可以通过拆解录制的脚本&#xff0c;将其中的元素提取出来…

Vscode 保存代码,代码自动格式化

我这里使用的插件是Prettier-Code formatter&#xff1a;自动缩进整理代码的格式&#xff0c;使用方法如下&#xff1a; 先在vscode商店找到插件并安装&#xff1a;安装插件之后&#xff0c;随便找到一个项目文件&#xff0c;右键选择格式化文档&#xff1a;选中我们安装的插件…

spring6框架解析(by尚硅谷)

文章目录 spring61. 一些基本的概念、优势2. 入门案例实现maven聚合工程创建步骤分析实现过程 3. IoC&#xff08;Inversion of Control&#xff09;基于xml的bean环境搭建获取bean获取接口创建实现类依赖注入 setter注入 和 构造器注入原生方式的setter注入原生方式的构造器注…

PyPDF2合并PDF文件的高级应用:指定合并方式

本文目录 前言一、合并PDF的高级应用1、逻辑讲解2、合并效果图3、完整代码二、异常校验1、合并过程中的错误校验前言 本文我们主要来讲解一下PyPDF2合并PDF文件的高级应用,就是指定合并方式进行合并,构建函数支持模式选择,主要不管咋折腾,其实就是不想去付费买那个PDF编辑…

PDF怎么分割成一页一页的?原来可以这么轻松

PDF怎么分割成一页一页的&#xff1f;PDF文档因其跨平台兼容性和可打印性而被广泛使用&#xff0c;但有时为了便于发送电子邮件、管理文档或保护敏感信息&#xff0c;我们需要将一个大型的PDF文件分割成多个小文件。幸运的是&#xff0c;分割PDF文件并不复杂。下文中就介绍了三…

webp2jpg网页在线图片格式转换源码

源码介绍 webp2jpg-免费在线图片格式转化器, 可将jpeg、jpg、png、gif、 webp、svg、ico、bmp文件转化为jpeg、png、webp、webp动画、gif文件。 无需上传文件&#xff0c;本地即可完成转换! 源码特点&#xff1a; 无需上传&#xff0c;使用浏览器自身进行转换批量转换输出we…

easyexcel使用小结-未完待续

官网&#xff1a;https://easyexcel.opensource.alibaba.com/docs/current/ <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.1</version></dependency>一、读 1.1简单读 Getter…

鸿蒙小案例-自定义键盘

一个自定义键盘 效果 完成简单的26键中英文输入 使用&#xff1a; Entry Component struct IndexInput {State text: string inputController: TextInputController new TextInputController()//自定义键盘关闭事件hideClick(){this.inputController.stopEditing()}//自定义…

软件测评机构:关于软件验收测试作用与实施步骤全解析

软件验收测试是指在软件项目交付给用户之前进行的一系列测试活动&#xff0c;其主要目的是验证软件是否符合用户需求和设计规范&#xff0c;以确保软件的质量和稳定性。 软件验收测试在软件开发生命周期的最后阶段进行&#xff0c;起到了至关重要的作用。它能够帮助客户确认软…

c++:动态内存变量

典型的C面向对象编程 元素 (1)头文件hpp中类的定义 (2)源文件cpp中类的实现&#xff08;构造函数、析构函数、方法&#xff09; (3)主程序 案例 (1)用C来编程“人一天的生活” (2)“人”的属性&#xff1a;name、age、male (3)“人”的方法&#xff1a;eat、work(coding/shop…

【网络安全学习】漏洞利用:BurpSuite的使用-03-枚举攻击案例

如何使用BurpSuite进行枚举攻击 1.靶场选择 BurpSuite官方也是有渗透的教学与靶场的&#xff0c;这次就使用BurpSuite的靶场进行练习。 靶场地址&#xff1a;https://portswigger.net/web-security 登录后如下图所示&#xff0c;选择**【VIEW ALL PATHS】**&#xff1a; 找…

PHP基础教程——总结W3school

1、<?php ?> 2、$ 声明变量 3、变量大小写敏感 关键字&#xff08;if、else、echo&#xff09;和用户定义的类、函数大小写不敏感 4、三种注释 // # /* */ 5、echo "<br>"; 换行 6、global(关键字) 函数内访问全局变量 $GLOBALS[index] …

经典链表算法题:找到环的入口。清晰图示推导出来

Leetcode题目链接 原理 重画链表如下所示&#xff0c;线上有若干个节点。记蓝色慢指针为 slow&#xff0c;红色快指针为 fast。初始时 slow 和 fast 均在头节点处。 使 slow 和 fast 同时前进&#xff0c;fast 的速度是 slow 的两倍。当 slow 抵达环的入口处时&#xff0c;如…

【公益案例展】四川农担x中电金信——大数据智能风控平台建设

‍ 中电金信公益案例 本项目案例由中电金信投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2024中国数据智能产业最具社会责任感企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 1、外部经济环境带来的挑战 近几年经济发展和市场需求的挑…

【C语言】—— 文件操作(下)

【C语言】—— 文件操作&#xff08;下&#xff09; 前言&#xff1a;五、文件的顺序读写5.1、 顺序读写函数介绍5.2、 f p u t c fputc fputc 函数5.3、 f g e t c fgetc fgetc 函数5.4、 f p u t s fputs fputs 函数5.5、 f g e t s fgets fgets 函数5.6、 f p r i n t f…