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;
    }

    @Override
    public 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/beans
		https://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 {
    @Test
    public 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/beans
		https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context
		https://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注入

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch从入门到精通-05ES匹配查询

Elasticsearch从入门到精通-05ES匹配查询 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是程序员行走的鱼 &#x1f4d6; 本篇主要介绍和大家一块学习一下ES各种场景下的匹配查询,有助于我们在项目中进行综合使用 前提 创建索引并指定ik分词器: PUT /es_db {"…

[ Linux ] vim的使用(附:命令模式的常见命令列表)

1.下载安装 这里是在通过yum进行下载安装 yum install -y vim 2.了解 vim是一款编辑器&#xff0c;它具有多模式的特点 主要有&#xff1a;插入模式&#xff0c;命令模式&#xff0c;底行模式 3.使用 打开 vim 文件名 命令模式的常见命令列表 插入模式 按「 i 」切换…

建设IAM/IDM统一身份管理,实现系统之间的单点登录(SSO)

企业实施身份管理的现状&#xff1a; 1.身份存储分散&#xff0c;不能统一供应诸多应用系统&#xff0c;企业用户信息常常存在于多个系统&#xff0c;如HR系统有一套用户信息&#xff0c;OA系统也有一套用户信息&#xff0c;身份存储不集中&#xff0c;不能统一地为诸多应用系…

BUUCTF-WEB1

[ACTF2020 新生赛]Exec1 1.打开靶机 是一个ping命令 2.利用管道符“|” ping一下本地主机并查看ls ping 127.0.0.1 | ls 可以看到回显的内容是一个文件 127.0.0.1 | cat index.php #查看主机下index.php 127.0.0.1 | ls / #查看主机根目录下的文件 看的一个flag文件 …

C++:菱形继承与虚继承

看下面这个示例代码 class A{ public: int num10; A(){cout<<"A构造"<<endl;} virtual void fun(){cout<<"A虚函数"<<endl;} };class B:public A{ public: B(){cout<<"B构造"<<endl;} void fun(){cout<…

Linux基本使用

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;热门专栏&#xff1a;网络原理&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 Linux是什么&#xff1f; Linux常用命令介绍 命令提示…

云服务器容器常用操作系统介绍

常用操作系统介绍 开源软件国内镜像源Alpine操作系统介绍镜像源修改镜像源apk包管理器 Debian操作系统介绍镜像源修改镜像源apt包管理器 ubuntu操作系统介绍修改镜像源apt包管理器 CentOS操作系统介绍修改镜像源yum包管理器 开源软件国内镜像源 名称地址南京大学mirror.nju.ed…

【安全类书籍-2】Web渗透测试:使用Kali Linux

目录 内容简介 作用 下载地址 内容简介 书籍的主要内容是指导读者如何运用Kali Linux这一专业的渗透测试平台对Web应用程序进行全面的安全测试。作者们从攻击者的视角出发,详细阐述了渗透测试的基本概念和技术,以及如何配置Kali Linux以适应渗透测试需求。书中不仅教授读者…

初识Java篇(JavaSE基础语法)(1)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a; 我要学编程(ಥ_ಥ)-CSDN博客 目录 前言&#xff1a; 初识Java 运行Java程序 注释 标识符 关键字 数据类型与变量 字面常量 数据类型 变量 类型转换 类型提升 字…

Android Kotlin(五)数据流StateFlow和LiveData

Android 上的 Kotlin 数据流 在协程中&#xff0c;与仅返回单个值的挂起函数相反&#xff0c;数据流可按顺序发出多个值。数据流以协程为基础构建&#xff0c;可提供多个值。从概念上来讲&#xff0c;数据流是可通过异步方式进行计算处理的一组数据序列。所发出值的类型必须…

【C语言】字符函数与字符串函数以及内存函数 { 超详细攻略,一篇学会 }

今日分享&#xff1a;字符、字符串函数和内存函数 内存函数就是对内存进行操作的函数 字符串函数就是对字符串进行操作的函数 字符函数就是对字符进行操作的函数 str前缀的函数是字符串函数&#xff0c;头文件string.h mem前缀的函数是内存函数&#xff0c;头文件stdlib.h 字符…

GEC6818——QT开发之两个UI界面切换与表格显示DHT11数据

GEC6818——QT开发之两个UI界面切换与表格显示DHT11数据 使用环境: ubantu16 QT5.7 开发板GEC6818 实现要求&#xff1a; 利用A53按键1、按键2与温湿度传感器完成QT界面动态显示温湿度记录&#xff0c;并指定温湿度记录超过指定范围&#xff0c;进行报警&#xff08;LED&#…

21-分支和循环语句_while语句(中)(初阶)

21-2 代码准备 getchar()&#xff1a;获取字符 int ch getchar(); //把获取的字符的ASCII码值放在ch中 int main() {int ch getchar();printf("%c\n", ch); //ch存的是该字符的ASCII码值&#xff0c;此处以字符形式打印ASCII码值对应的字符putchar(ch); } 运…

MATLAB的多项式相加

多项式的加减在阶次相同的情况下可直接运算&#xff0c;若两个相加减的多项式阶次不同&#xff0c;则低阶多项式必须用零填补高阶项系数&#xff0c;使其与高阶多项式有相同的阶次。而且通常情况下&#xff0c;进行加减的两个多项 式的阶次不会相同&#xff0c;这时可以自定义一…

JVM从1%到99%【精选】-【初步认识】

目录 1.java虚拟机 2.JVM的位置 3.代码的执行流程 4.JVM的架构模型 5.JVM的生命周期 6.JVM的整体结构 1.java虚拟机 Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。JVM平台的各种语言可以共享Java…

数据同步操作需要注意哪些点?

前言 有时候基于业务&#xff0c;我们会做一些数据清洗&#xff0c;或者老项目数据同步新项目的相关操作。在做这些业务的时候&#xff0c;往往需要注意一些必要的关键点&#xff0c;否则会造成数据的错乱&#xff0c;我们知道数据一单错乱是很难处理的。 参考文章 原作者&a…

unittest--封装excel操作

封装excel操作 操作流程类和对象初始化对象操作获取表格的数据初始化一个用于操作Excel文件的对象获取表头和所有测试用例数据数据拼接 (dict)主函数调用 操作流程 1、初始化表格对象&#xff1a; 文件路径workbook&#xff0c;表单名称sheet_name 2、初始化sheet对象 &#xf…

RIPGeo参文31—36(关于对比学习):鼓励对同一数据点进行各种增强(视图),以学习更健壮的表示

RIPGeo中有: —干扰参数。在内部最大化中,我们提出了步骤,以增加损失的方向更新。我们的方法不是用简单的一步方案最大化内部部分,而是在每次迭代结束时将扰动投影到球面空间上(第2-7行),这允许模型产生更微妙但有价值的扰动[31]。 [31] A. Kurakin, I. J. Goodfellow…

ChatGPT丨“智领科研新纪元:AI大模型,您的第二大脑!“

AI大模型引领未来智慧科研暨ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的应用 以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数…

【蓝桥杯嵌入式】四、各种外设驱动(七)定时器的输出比较功能

温馨提示&#xff1a;本文不会重复之前提到的内容&#xff0c;如需查看&#xff0c;请参考附录 【蓝桥杯嵌入式】附录 重点提炼&#xff1a; 根据手册内容&#xff0c;输出比较模式&#xff08;output Compare CHx&#xff09;的功能主要需要由以下参数决定&#xff1a; 通…