Bean的自动装配

news2024/12/25 12:59:29

目录结构

导入pom.xml依赖包

 <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>

        <!--        aop-->
        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.19</version>
            <scope>runtime</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

People类,人可以有多个宠物

package com.qing;

public class People {

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

    @Override
    public String toString() {
        return "People{" +
                "cat=" + cat +
                ", dog=" + dog +
                ", name='" + name + '\'' +
                '}';
    }
}

Cat类

package com.qing;

public class Cat {
    public void shout(){
        System.out.println("喵");
    }
}

Dog类

package com.qing;

public class Dog {
    public void shout(){
        System.out.println("汪");
    }
}

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 id="cat" class="com.qing.Cat"></bean>
      <bean id="dog" class="com.qing.Dog"></bean>

     <bean id="people" class="com.qing.People">
         <property name="name" value="你好呀"></property>
         <property name="cat" ref="cat"></property>
         <property name="dog" ref="dog"></property>

     </bean>


</beans>

测试代码

import com.qing.People;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
    @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        People people = context.getBean("people", People.class);
        people.getDog().shout();
        people.getCat().shout();
    }
}

byName自动装配

 byName:会自动在容器上下文查找,和自己这个对象的set方法后面值对应的bean中的id

如果id不满足对象的名字,则会报错;例如:dog222不满足对象的id名字

byType自动装配

 byType:会自动在容器上下文中查找,和自己对象属性相同的bean,可以省略id

不能有两个一样的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: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">

    <bean id="cat" class="com.qing.Cat"></bean>
    <bean id="dog" class="com.qing.Dog"></bean>
    <bean id="people" class="com.qing.People"></bean>
<!--    开启注解的支持-->
    <context:annotation-config/>

</beans>

在属性上配置注解

    @Autowired
    private Cat cat;
    @Autowired
    private Dog dog;

    private String name;

 如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解@Autowired完成的时候,我们可以使用@Qualifier(value="xxx")去配置@Autowired的使用,指定一个唯一的bean对象注入

总结:

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

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

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

相关文章

工赋开发者社区 | Gartner发布2023年十大数据和分析趋势

来源&#xff1a;Gartner Gartner&#xff08;技术研究和分析机构&#xff09;近日公布了2023年十大数据和分析&#xff08;D&A&#xff09;趋势&#xff0c;可帮助企业领导者通过预测变化将不确定性转化为新的商机。 正文开始 Gartner在Gartner数据与分析峰会上介绍了企…

诞生两年,这个产品便成为腾讯安全的“秘密武器”

腾讯既是企业服务产品的服务商又是使用者&#xff0c;很多产品最原始的出发点最早只是为了解决腾讯自身某一个需求&#xff0c;经过不断地发展完善和业务场景锤炼&#xff0c;最终从进化成一个成熟的企服产品。本系列文章讲述的是这样一组Made in Tencent故事&#xff0c;这是系…

2023年 - 我们遇到的那些面试题 (1) - 面试技巧和功能测试篇

前言 最近收到了很多粉丝反馈的面试题 。。 有主观题 &#xff0c;有功能测试题&#xff0c;有python编程题 &#xff0c;有自动化测试题&#xff0c;有数据库题&#xff0c;linux等。。 本文作为《测试面试宝典》内容&#xff0c;将面试题以及部分参考答案开放出来。。 1、…

只要做好这布成为测试经理不是梦!

之前说了太多的测试技术和测试用例设计方法&#xff0c;猛地发现有点“偏科“了。今天我们放松一些&#xff0c;泡一杯茶&#xff0c;一起来聊一聊测试策略吧。 当然&#xff0c;文章脉络肯定是咱们老三样&#xff1a;什么是测试策略&#xff0c;为什么要制定测试策略&#xf…

3年测试经验,跳进腾讯,3面终获20K的Offer...

前言 时间过得飞快&#xff0c;一代又一代就这么成长了起来&#xff0c;曾经的95后备受争议&#xff0c;如今的95后进入社会&#xff0c;扮演者各行角色&#xff0c;成为了行业顶梁柱&#xff0c;今天&#xff0c;要分享的是自己的成长经历。今年24岁&#xff0c;毕业之后进入…

5th-Generation Mobile Communication Technology(六)

目录 一、5G/NR 1、 快速参考&#xff08;Quick Reference&#xff09; 2、5G Success 3、5G Challenges 4、Qualcomm Videos 二、PHY and Protocol 1、Frame Structure 2、Numerology 3、Waveform 4、Frequency Band 5、BWP 6、Synchronization 7、Beam Management 8、CSI Fra…

UE4 监听游戏窗口最小化事件

UE4 监听游戏窗口最小化事件 结论&#xff1a; 先说结论&#xff1a;Windows相关事件在UE4中引擎部分也会处理&#xff0c;包括窗口创建&#xff0c;销毁&#xff0c;最大化最小化&#xff0c;窗口尺寸改变等。通常&#xff0c;每个事件与Windows一样都是WM_***的样子表示&…

静态程序分析学习心得 tai-e

0x00 前言 经过将近2个月的时间&#xff0c;看完了b站上南大的静态程序分析课程&#xff0c;并且完成了其oj上的作业&#xff0c;在这里记录一下在做题过程中&#xff0c;遇到的一些坑点&#xff0c;文章不会贴源码&#xff0c;只记录一下思路&#xff0c;因此大家可以放心阅读…

aac怎么转化为mp3?4个超简易转换方法推荐给大家!

aac怎么转化为mp3&#xff1f;音乐是人类灵魂的表达&#xff0c;只有懂得欣赏音乐的人才能领略到生活的美好与价值。除了运动、看电影等&#xff0c;聆听音乐也是小伙伴们调剂生活的一个好方式。很多小伙伴都有在网上下载音乐的习惯&#xff0c;通过我们也都知道音乐的格式种类…

Linux系统编程——多线程[下]:生产消费模型信号量线程池

0.关注博主有更多知识 操作系统入门知识合集 目录 1.生产者消费者模型 1.1基于阻塞队列的生产者消费者模型 1.2生产消费模型的效率问题 2.信号量 2.1信号量 2.2基于环形队列的生产者消费者模型 2.3环形队列的生产消费模型的效率问题 3.线程池 3.1线程池的实现 1.生…

javaIO流之转换流

目录 简介一、编码和解码二、字符集2.1ASCII 字符集2.2Unicode 字符集2.3GBK 字符集 三、乱码四、InputStreamReader4.1构造方法4.2解决编码问题 五、OutputStreamWriter六、小结 简介 转换流可以将一个字节流包装成字符流&#xff0c;或者将一个字符流包装成字节流。这种转换…

Ajax、Promise、Axios前端三剑客

文章目录 &#x1f433;前言关系二维表&#xff1a; &#x1f433;Ajax定义&#xff1a;特点&#xff1a;&#x1f421;核心对象XMLHttpRequest&#xff1a;XMLHttpRequest对象的五种状态&#xff1a; 使用&#xff1a;1.Jquery的ajax&#xff1a;2.Vue的ajax&#xff1a; &…

【C#】GridControl增加选择列(不用二次点击)

系列文章 【C#】单号生成器&#xff08;编号规则、固定字符、流水号、产生业务单号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器&#xff08;开始日期、结束日期&#xff09; 本文链接&#xff1a;h…

【FMC156】基于VITA57.1标准的2路2.5GSPS采样率16位分辨率直流耦合DA播放FMC子卡模块(DAC38J82)

产品概述 FMC156 是一款基于VITA57.1 标准规范&#xff0c;实现2 路2.5GSPS 采样率16 位分辨率直流耦合DAC 播放子卡模块。该模块遵循VITA57.1 标准&#xff0c;可直接与FPGA 载卡配合使用&#xff0c;板卡DAC 器件采用TI 公司的DAC38J82 芯片&#xff0c;该芯片提供4 个模拟输…

2023,有哪些适合网工跳槽的好公司?(不是BAT)

大家好啊&#xff0c;我的网工朋友 都说行业内卷&#xff0c;卷的不成人形&#xff0c;这内卷&#xff0c;一卷就卷了好几年。 很多网工同行都讨厌被卷来卷去&#xff0c;但是看到同行进了大厂&#xff0c;免不了还是要羡慕嫉妒恨一波。 作为主编几年&#xff0c;我就发现了…

注册ChatGPT时提示Oops! The email you provided is not supported

问题描述 今天本想出一个ChatGPT的注册与使用的教程&#xff0c;结果上来吃了个闭门羹。之前我通过微软账号登录验证是没有问题的&#xff0c;但这次想使用另一个微软账号&#xff0c;结果提示Oops! The email you provided is not supported&#xff08;您提供的电子邮件不支…

C# 给winfrom窗体添加皮肤控件

如何快速给C# winform添加好看的皮肤C# Winform中窗体的美化 SkinEngine的应用 皮肤控件换肤素材包&#xff0c;IrisSkin2.dll皮肤素材资源下载 压缩包内一共有22种皮肤素材&#xff0c;使用说明&#xff1a;把控件拖到你的form上&#xff0c;只需一行代码&#xff0c;即可实…

Ubuntu安装时没注册root用户密码,怎么登录root

一、Ubuntu设置root密码: 1.桌面空白处右键菜单 点击“打开终端“。 2.输入命令 "sudo passwd root

Cinema 4d 和 3ds Max:哪个软件更好?

3D 设计有很多挑战。设计师通常需要克服他们的看法和偏见&#xff0c;此外还要学习一些深入的程序来有效地使用 3D 风格的软件系统。市场上有很多用于3D设计的软件&#xff0c;因此对于哪一种对您的需求最有效会令人困惑。如果您不熟悉3D&#xff0c;或者您正在四处寻找新的软件…

数据进行分组后同一字段字符串连接方法

数据源如下&#xff1a;期望将同一个id_supplier_basic_info输出的supplier_type写在一行上&#xff0c;可以按‘/’分隔 一开始的时候使用的是但是一直提示找不到这个函数&#xff0c;一时陷入迷惑&#xff0c;难道是mysql不支持这个函数&#xff1f;但是百度明明都说mysql是支…