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,一经查实,立即删除!

相关文章

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

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

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

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

数据结构的概念大合集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文件_…

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;那个节点值较小…

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

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

数据可视化学习: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;相当于…

基础知识学习 -- qnx 系统

QNX是一个基于优先级抢占的系统。 这也导致其基本调度算法相对比较简单。因为不需要像别的通用操作系统考虑一些复杂的“公平性”&#xff0c;只需要保证“优先级最高的线程最优先得到 CPU”就可以了。 基本调度算法 调度算法&#xff0c;是基于优先级的。QNX的线程优先级&a…

VS调试快捷键

VS调试快捷键 4. VS调试快捷键4.1 环境准备4.2 调试快捷键调试最常使⽤的⼏个快捷键&#xff1a; 4. VS调试快捷键 那程序员怎么调试代码呢&#xff1f; 4.1 环境准备 首先是环境的准备&#xff0c;需要⼀个支持调试的开发环境&#xff0c;我们上课使用VS&#xff0c;应该把…

Magical Combat VFX

这个包包含30个可供游戏使用的VFX,有各种口味,为您的游戏增添趣味! 所有VFX都经过了很好的优化,可以在所有平台上使用。 这个包特别有一堆闪电魔法,有两种主要的变体,一种是深色的,另一种是浅色的。但它也提供了一系列其他视觉效果,如神圣咒语、音乐主题等等! 我们提供…

fetch,前端 面试题

Fetch Fetch API 是近年来被提及将要取代XHR的技术新标准&#xff0c;是一个 HTML5 的 API。 基于promise的设计&#xff0c;返回的是Promise对象 fetch()采用模块化设计&#xff0c;API 分散在多个对象上&#xff08;Response 对象、Request 对象、Headers 对象&#xff09;…

如何在webapp中于动发布一个应用

目录 第一步&#xff1a;在webapp文件夹内自定义文件夹第二步&#xff1a;生成一个文本&#xff0c;并把后缀改为 .html第三步&#xff1a;进入bin文件夹打开服务第四步&#xff1a;打开方式选择java第六步&#xff1a;输入你想输出的东西第七步&#xff1a;双击运行即可 第一步…

mybatis-plus笔记1

mybatis-plus笔记1 mybatis-plus快速入门基于Mapper接口的crud增强基于service的crud分页查询分页添加到自定义方法queryWrapper简单使用使用细节 updateWrapperlambdaWrapper mybatis-plus快速入门 pom.xml文件中导入相关依赖 application.yaml配置文件 MainApplication.java…

使用Java Runtime执行docker下的mysqldump

Runtime直接使用 docker exec mysql mysqldump -u%s -p%s cblog > %s&#xff08;%s是需要填充的数据&#xff09;&#xff0c;命令无法执行并且不会报错&#xff0c;需要使用字符串数组加入"sh", “-c”&#xff0c;具体代码示例&#xff1a; /*** MySQL数据备份…

KubeSphere 社区双周报|2024.02.29-03.14

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2024.02.29-03.14…

vue 记录一个echarts页面 单色环形饼图 多色环形饼图 柱状图加折线图 饼状图 双柱状图 雷达图 多色堆叠柱状图

“设备使用”模块没有做 因为项目不需要 仅自己记录使用 可供参考 那么上代码 <template><!--app-container--><div class"home-wrap"><div class"wrap" v-if"schoolId"><!--第一块--><div class"statis…

MongoDB从0到1:高效数据使用方法

MongoDB&#xff0c;作为一种流行的NoSQL数据库。从基础的文档存储到复杂的聚合查询&#xff0c;从索引优化到数据安全都有其独特之处。文末附MongoDB常用命令大全。 目录 1. 引言 MongoDB简介 MongoDB的优势和应用场景 2. 基础篇 安装和配置MongoDB MongoDB基本概念 使…

Win10 无法安装微软1月安全更新,出现 0x80070643 错误

出现这个问题的原因在于系统分配的“恢复分区”空间不足&#xff0c;该更新在安装时会失败。大致的思路是利用dispart工具收缩C盘空间&#xff0c;扩展该分区的空间。本人开始的“恢复分区”的空间是603MB&#xff0c;安装更新失败&#xff0c;扩充了250MB后&#xff0c;成功了…