Bean的自动装配

news/2024/11/19 15:32:27/

目录结构

导入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;}@Overridepublic 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/beanshttps://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 {@Testpublic 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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://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>

在属性上配置注解

    @Autowiredprivate Cat cat;@Autowiredprivate Dog dog;private String name;

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

总结:

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

所有的类都需装入spring里面,所有的bean都需要去容器去获取,容器获取的bean是一个对象


http://www.ppmy.cn/news/89172.html

相关文章

《Cocos Creator游戏实战》老虎机抽奖效果实现思路

在线体验地址 Cocos Creator | SlotMachine Cocos Store 购买地址&#xff08;如果没有显示&#xff0c;那就是还在审核&#xff09;&#xff1a; https://store.cocos.com/app/detail/4958微店购买地址&#xff1a; https://weidian.com/item.html?itemID6338406353运行效果…

C#把类字段数据转成json数据存到本地txt文件,以及取出来

首先新建一个TxTModel类 public class TxTModel{public List<TXTData> Data { get; set; }//路径以及文件名string txtPath $"{Environment.CurrentDirectory}\\TxTData.txt"; public TxTModel(){//检查路径是否存在该文件&#xff0c;存在则取出来&#xff0…

图像处理:灰度图片线性截断拉伸

1. 为什么要拉伸 很多时候&#xff0c;灰度图片的灰度级较大&#xff0c;而像素值的分布比较集中&#xff0c;这就导致灰度级的利用率过低&#xff0c;从而导致图片的对比度很小&#xff0c;人眼的感官体验很不好&#xff0c;因此我们通常需要对原始的图像数据进行拉伸调整&…

助力工业物联网,工业大数据之一站制造业务主题划分【十三】

文章目录 01&#xff1a;一站制造业务主题划分02&#xff1a;一站制造业务维度设计03&#xff1a;一站制造业务主题维度矩阵 01&#xff1a;一站制造业务主题划分 目标&#xff1a;掌握一站制造的主题域及主题的划分实施 来源 主题域划分&#xff1a;业务或者部门划分 业务&am…

原地移除元素

原地移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。 暴力 class Solution { public:int remove…

Android Studio 2022.3 新版 flamingo 安装步骤及遇到的问题

下载地址: https://developer.android.google.cn/studio D盘中新建一个 Android 文件夹, 用来存储 Android studio 和 SDK 文件. 下载好之后, 运行 exe 文件, 点击 next 注意这个路径最好不要有空格,比如 program files这种目录,不然后面安装sdk的时候会有问题. 点击 instal…

机械师曙光16电脑开机自动蓝屏怎么解决?

机械师曙光16电脑开机自动蓝屏怎么解决&#xff1f;有的用户在使用机械师曙光16电脑的时候&#xff0c;遇到了一些系统问题&#xff0c;导致自己无法正常的开机使用电脑。因为电脑总会变成蓝屏&#xff0c;无法进行任何操作。那么这个情况怎么去进行问题的解决呢&#xff1f;来…

LiveGBS流媒体平台国标GB/T28181功能-作为下级级联到海康大华宇视华为等第三方国标平台同样支持对接政务公安内网国标视频平台

LiveGBS流媒体平台国标GB/T28181功能-作为下级级联到海康大华宇视华为等第三方国标平台同样支持对接政务公安内网国标视频平台 1、什么是GB/T28181级联2、搭建GB28181国标流媒体平台3、获取上级平台接入信息3.1、如何提供信息给上级3.2、上级国标平台如何添加下级域3.2、接入Li…