Bean的作用域、Bean的自动装配、注解自动装配 (Spring学习笔记五)

1、Bean 的作用域

官网上显示有六种

 1、Bean的作用域默认的是singleton(单例模式的实现)

也可以显示的设置(单例模式的实现)

<!--用scope可以设置Bean的作用域--><bean id="user2" class="com.li.pojo.User" c:name="李四" c:age="33" scope="singleton"/>

2、prototype圆形模式:每次从容器总get的时候,都会产生一个新对象

<!--用scope可以设置Bean的作用域--><bean id="user2" class="com.li.pojo.User" c:name="李四" c:age="33" scope="prototype"/>

3、剩下的四个都只有在web开发中用到    request   session    application   websocket

2、Bean的自动装配 

测试环境:一个人养了一只狗和一只猫

public class Cat {public void shout(){System.out.println("喵喵叫");}
}
public class Dog {public void shout(){System.out.println("汪汪叫");}
}
package com.li.pojo;public class People {private Dog dog;private Cat cat;private String name;public People(Dog dog, Cat cat, String name) {this.dog = dog;this.cat = cat;this.name = name;}public People() {}public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}public Cat getCat() {return cat;}public void setCat(Cat cat) {this.cat = cat;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "People{" +"dog=" + dog +", cat=" + cat +", name='" + name + '\'' +'}';}
}

配置文件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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--配置Bean--><bean id="dog" class="com.li.pojo.Dog"/><bean id="cat" class="com.li.pojo.Cat"/><bean id="people" class="com.li.pojo.People"><property name="name" value="张三"/><property name="cat" ref="cat"/><property name="dog" ref="dog"/></bean></beans>

 测试

package com.li.pojo;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestGo {@Testpublic void test1(){ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");People people = context.getBean("people", People.class);people.getCat().shout();people.getDog().shout();}
}

自动装配关键字autowire

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

<!--也就是这里id的值要和set方法名称除去set后的值一样--><bean id="dog" class="com.li.pojo.Dog"/><bean id="cat" class="com.li.pojo.Cat"/><!--autowire="byName"
byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid--><bean id="people" class="com.li.pojo.People" autowire="byName"><property name="name" value="张三"/></bean>

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

<!--也就是这里class的值要和目标对象的属性相同,这样也有一个问题就是不能有两个属性相同的bean,自动装配会不知道自己要装配哪一个--><bean id="dog" class="com.li.pojo.Dog"/><bean id="cat" class="com.li.pojo.Cat"/><!--autowire="byName"
byType:会自动在容器上下文中查找,和自己对象属性相同的bean--><bean id="people" class="com.li.pojo.People" autowire="byType"><property name="name" value="张三"/></bean>

3、注解实现自动装配

使用注解须知

1.导入约束。context约束

2.配置注解的支持  <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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!--注解支持--><context:annotation-config/><bean id="dog" class="com.li.pojo.Dog"/><bean id="cat" class="com.li.pojo.Cat"/><bean id="people" class="com.li.pojo.People"/></beans>

3.使用

 在需要装配的属性上方加上@Autowired

在属性上方使用@Autowired之后可以不写set方法,前提是自动装配的属性在ioc(Spring)容器中存在,且符合名字byname

或者在需要装配的属性的set方法上加上@Autowired

如果@Autowired自动装配的环境比较复杂,自动装配无法通过已经注解【@Autowired】完成的时候,我们可以使用@Qualifier(value = "需要注入的bean 的id")去配合@Autowired使用,指定一个唯一的bean注入

例:通过byName和 byType都无法装配时

 使用@Qualifier(value = "需要注入的bean 的id名")去配合@Autowired

上面这个是Spring的注解,有一个Java的注解也可以使用@Resource正常情况下byName和 byType(名字和类型)正常装配就可以了和@Autowired正常情况差不多

如果装配情况复杂byName和 byType(名字和类型)不能装配时用@Resource(name ="需要注入的bean 的id名")来指定一个唯一的bean注入

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

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

相关文章

如何实现分词

分词&#xff08;Tokenization&#xff09;是自然语言处理&#xff08;NLP&#xff09;中的一个基本步骤&#xff0c;特别是在构建搜索引擎时&#xff0c;它将文本拆分成单词、短语或其他有意义的元素&#xff08;称为“词素”或“tokens”&#xff09;。对于中文文本来说&…

A*(AStar)算法总结

简介 A* 算法&#xff08;念做&#xff1a;A Star&#xff09;是一种常用的路径查找和图形遍历算法&#xff0c;具有较好的性能和准确度。让我为您简要介绍一下 A* 算法的原理和实现。 广度优先搜索&#xff1a; 广度优先搜索以广度作为优先级进行搜索。从起点开始&#xff0…

NCV8705MTADJTCG稳压器芯片中文资料规格书PDF数据手册引脚图图片价格功能

产品概述&#xff1a; NCV8705 是一款低噪音、低功耗和低泄漏线性电压稳压器。该器件具有卓越的噪音和 PSRR 规格&#xff0c;适用于使用视频接收器、成像传感器、音频处理器或需要外部洁净电源的任何部件的产品。NCV8705 使用创新的自适应接地电流电路 可确保轻负载调节下的超…

IDEA SpringBoot + Gradle无法运行测试问题

解决 i. 查看 build.gradle 中是否配置了 tasks.named(‘test’) { useJUnitPlatform() } ii. 打开IDEA 设置 &#xff08;Mac用户 Com &#xff0c; 可快速打开 / Win用户 Ctrl Alt s&#xff09; 检索Gradle 后&#xff0c;将Run tests using 选项 变更成 intelliJ IDEA…

http请求方法15种,附图可以下载保存备查。

一、http请求组成和流程 HTTP请求是客户端&#xff08;如浏览器&#xff09;向服务器发送的请求&#xff0c;以获取特定资源或执行特定操作。HTTP请求由以下几个部分组成&#xff1a; 请求行&#xff1a;包含请求方法、请求的URL和HTTP协议版本。常见的请求方法有GET、POST、P…

Rust 的 HashMap

在 Rust 中&#xff0c;HashMap 是一个从键&#xff08;key&#xff09;映射到值&#xff08;value&#xff09;的数据结构。它允许你以 O(1) 的平均时间复杂度存储、检索和删除键值对。HashMap 实现了 std::collections::HashMap 结构体&#xff0c;通常通过 use std::collect…

C#--StreamWriter和StreamReader对象及常用函数

目录 StreamReaderReadLine()Split&#xff08;&#xff09; StreamWriterWriteLine&#xff08;&#xff09;Flush()Close() StreamReader StreamReader 是 C# 中用于从流&#xff08;如文件、内存流等&#xff09;中读取文本数据的类。它提供了多种方法来读取不同类型的数据…

关于Canvas绘图和SVG绘图绘图的区别

当谈到Canvas绘图和SVG绘图时&#xff0c;它们是两种不同的绘图技术&#xff0c;各自具有不同的特点和应用场景。 区别&#xff1a; Canvas绘图&#xff1a;Canvas是HTML5中的一个元素&#xff0c;它提供了一个可以通过JavaScript进行绘图的区域。Canvas绘图是基于像素的&…

实景户外剧本杀小程序开发搭建

实景户外剧本杀小程序开发搭建需要以下步骤&#xff1a; 1. 确定需求和设计&#xff1a;首先需要明确实景户外剧本杀小程序的需求&#xff0c;包括场景、剧本、角色、玩法等方面的需求&#xff0c;并根据需求设计小程序的界面和功能。 2. 选择开发技术&#xff1a;根据需求选…

数据结构的概念大合集01(含数据结构的基本定义,算法及其描述)

概念大合集01 1、数据结构基础的定义2、数据结构2.1 数据元素之间关系的集合2.2数据结构的三要素2.2.1数据的逻辑结构2.2.2数据的存储&#xff08;物理&#xff09;结构2.2.3数据的运算 3、数据类型4、抽象数据类型类型&#xff08;ADT&#xff09;5、算法及其描述5.1算法的5个…

Qt文件以及文件夹相关类(QDir、QFile、QFileInfo)的使用

关于Qt相关文件读写操作以及文件夹的一些知识&#xff0c;之前也写过一些博客&#xff1a; Qt关于路径的处理&#xff08;绝对路径、相对路径、路径拼接、工作目录、运行目录&#xff09;_qt 相对路径-CSDN博客 C/Qt 读写文件_qt c 读取文本文件-CSDN博客 C/Qt读写ini文件_…

【C++】C++面向对象练习题

利用多态机制完成以下题目 现需要一个理财程序&#xff0c;其中包含四个类&#xff0c;分别为投资&#xff08;Investment&#xff09;、储蓄&#xff08;Saving)、基金&#xff08;Fund&#xff09;和理财人&#xff08;Person&#xff09;&#xff0c;储蓄和基金为两种具体投…

Docker学习之数据管理(超详解析)

Docker存储资源类型&#xff1a; 用户在使用 Docker 的过程中&#xff0c;势必需要查看容器内应用产生的数据&#xff0c;或者需要将容器内数据进行备份&#xff0c;甚至多个容器之间进行数据共享&#xff0c;这必然会涉及到容器的数据管理&#xff1a; &#xff08;1&#xff…

(含代码)利用NVIDIA Triton加速Stable Diffusion XL推理速度

在 NVIDIA AI 推理平台上使用 Stable Diffusion XL 生成令人惊叹的图像 扩散模型正在改变跨行业的创意工作流程。 这些模型通过去噪扩散技术迭代地将随机噪声塑造成人工智能生成的艺术&#xff0c;从而基于简单的文本或图像输入生成令人惊叹的图像。 这可以应用于许多企业用例&…

【剑指offer--C/C++】JZ25 合并两个排序的链表

题目 思路 这个题目大逻辑比较简单&#xff0c;就是一个比较和穿插&#xff0c;但细节上要考虑清楚&#xff0c;可以画个图模拟一下。我这里是设置将两个链表拆开组成一个新的链表&#xff0c;这样不需要占用新的空间。两个指针对应节点的值进行比较&#xff0c;那个节点值较小…

GEE——如何在谷歌地球引擎中获取二进制概率的准确性?(含具体代码介绍)

如何在谷歌地球引擎中获取二进制概率的准确性? Receiver Operating Characteristic(ROC)简介 Receiver Operating Characteristic(ROC)曲线是一种描述分类模型性能的图形工具。在二元分类问题中,ROC曲线以假正例率(False Positive Rate, FPR)为横坐标,真正例率(Tru…

【Stable Diffusion】入门-03:图生图基本步骤+参数解读

目录 1 图生图原理2 基本步骤2.1 导入图片2.2 书写提示词2.3 参数调整 3 随机种子的含义4 拓展应用 1 图生图原理 当提示词不足以表达你的想法&#xff0c;或者你希望以一个更为简单清晰的方式传递一些要求的时候&#xff0c;可以给AI输入一张图片&#xff0c;此时图片和文字是…

QT表格初始化与数据库值插入(库存管理系统)

void MainWidget::TableWidgetListDataFunc() // tablewidget表格控件初始化操作 {// 编号 名称 数量 单价 供应商家 负责人 入库时间 出库时间 备注// 设置表格控件200行9列ui->tableWidget_ListData->setColumnCount(9);ui->tableWidget_ListData->setRowCount(2…

Android 11存储权限兼容

Android 11 外部存储权限适配指南及方案 - 简书 //https://www.jianshu.com/p/e94cea26e213<uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name"android.permission.MANAGE_EXTERNAL_STORA…

数据可视化学习:Matplotlib概述

一、图表的常用设置 1.基本绘图主要函数 (1).matplotlib.pyplot.plot(x,y,format_string,**kwargs) 2.参数说明 (1).x:x轴数据 (2).y:y轴数据 (3).format_string:控制曲线格式的字符串&#xff0c;包括颜色、线条样式和标记样式 (4)**kwargs:键值参数&#xff0c;相当于…