Spring中bean有三种装配机制,分别是在xml中显式配置,在java中显式配置,隐式的bean发现机制和自动装配

Spring的自动装配需要通过两个操作来实现,一是组件扫描,spring会自动发现应用上下文中所创建的bean,二是自动装配,spring自动满足bean之间的依赖,也就是我们说的IoC/DI

新建实体类

package com.dream.pojo;public class Cat {public void shout(){System.out.println("miao~");}
}
package com.dream.pojo;public class Dog {public void shout(){System.out.println("wang~");}
}
package com.dream.pojo;public class User {private Cat cat;private Dog dog;private String str;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 getStr() {return str;}public void setStr(String str) {this.str = str;}
}

编写Spring配置文件

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="dog" class="com.dream.pojo.Dog"/><bean id="cat" class="com.dream.pojo.Cat"/><bean id="user" class="com.dream.pojo.User"><property name="cat" ref="cat"/><property name="dog" ref="dog"/><property name="str" value="张三"/></bean>
</beans>

测试

import com.dream.pojo.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest {@Testpublic void testMethodAutowire() {ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");User user = (User) context.getBean("user");user.getCat().shout();user.getDog().shout();}
}

按名称自动装配(byName)

<bean id="dog" class="com.dream.pojo.Dog" />
<bean id="cat" class="com.dream.pojo.Cat"/>
<bean id="user" class="com.dream.pojo.User" autowire="byName"><property name="str" value="张三"/></bean>

autowire="byName"会先查找其类中所有的set方法名,获得set后面且首字母变为小写的字符串,然后去Spring容器中查找是否有此字符串名称id的对象,如果有就取出注入

按类型自动装配(byType)

<bean id="doggg" class="com.dream.pojo.Dog" />
<bean id="cccat" class="com.dream.pojo.Cat"/>
<bean id="user" class="com.dream.pojo.User" autowire="byType"><property name="str" value="张三"/></bean>

注意同一类型的对象,在spring容器中必须唯一

使用注解

在Spring配置文件中引入context文件头

xmlns:context="http://www.springframework.org/schema/context"http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd

开启属性注解支持

<context:annotation-config/>

@Autowired

按类型自动转配,不支持id匹配

    @Autowiredprivate Cat cat;@Autowiredprivate Dog dog;private String str;
 <bean id="dog" class="com.dream.pojo.Dog"/><bean id="dog2" class="com.dream.pojo.Dog"/><bean id="cat" class="com.dream.pojo.Cat"/><bean id="user" class="com.dream.pojo.User"><property name="str" value="张三"/></bean>

@Autowired(required=false) 对象可以为null

@Autowired(required = false)
private Cat cat;

@Autowired加上@Qualifier可以先根据byName的方式自动装配,@Qualifier不能单独使用

<bean id="dog1" class="com.dream.pojo.Dog" /><bean id="dog2" class="com.dream.pojo.Dog" /><bean id="cat1" class="com.dream.pojo.Cat"/><bean id="cat2" class="com.dream.pojo.Cat"/><bean id="user" class="com.dream.pojo.User" ><property name="str" value="张三"/></bean>
@Autowired@Qualifier(value = "cat2")private Cat cat;@Autowired@Qualifier(value = "dog1")private Dog dog;private String str;

@Resource

如有指定的name属性,先按该属性进行byName方式查找装配,其次再进行默认的byName方式进行装配,如果以上都不成功,则按byType的方式自动装配

<bean id="dog" class="com.dream.pojo.Dog" /><bean id="dog2" class="com.dream.pojo.Dog" /><bean id="cat2" class="com.dream.pojo.Cat"/><bean id="user" class="com.dream.pojo.User" ><property name="str" value="张三"/></bean>
@Resource(name = "cat2")private Cat cat;@Resourceprivate Dog dog;private String str;

7.Bean的自动装配相关推荐

  1. Spring精华问答 | Spring Bean的自动装配是怎么回事?

    戳蓝字"CSDN云计算"关注我们哦! Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Sprin ...

  2. Spring之 Bean的自动装配

    什么是Spring Bean的自动装配? 自动装配是Spring满足bean依赖一种方式 Spring会在上下文种自动寻找,并自动给bean装配属性 Spring种有三种装配方式 1.在xml种显示配 ...

  3. Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配

    一.Spring IOC 容器支持自动装配 Bean,所谓自动装配是指,不需要通过 <property> 或 <constructor-arg> 为 Bean 的属性注入值的过 ...

  4. ❤️Bean的自动装配(详细)

    ❤️Bean的自动装配(详细) 自动装配是Spring满足bean依赖的一种方式! Spring会在上下文中自动寻找,并自动给bean装配属性! 在Spring中有三种自动装配的方式 在xml中显示的 ...

  5. Spring之Bean的自动装配

    Spring从入门到精通–(4)Spring之Bean的自动装配 作者:进击攻城狮 个人主页:欢迎访问我的主页 首发时间:2022年8月5日星期五 订阅专栏:Spring入门到精通 个人信条:星光不问 ...

  6. [Spring实战系列](12)Bean的自动装配

    Spring提供了4种各具特色的自动装配策略: 类型 说明 no 默认方式,Bean的引用必须通过XML文件中的</ref>元素或者ref属性手动设定. byName 把与Bean的属性具 ...

  7. 万字详解! Spring Bean的自动装配

    点击上方 Java学习之道,选择 设为星标 每天18点,干货准时奉上! 何为自动装配 自动装配是 Spring 满足 bean 依赖的一种方式. 在使用 Spring 配置 bean 时,我们都要给配 ...

  8. Spring-04 Bean的自动装配

    Bean的自动装配 1.自动装配是Spring满足Bean依赖的一种方式 2.Spring会在上下文中自动寻找,并自动给Bean装配属性 Spring中bean有三种装配机制,分别是: 1 在xml中 ...

  9. Bean的自动装配:autowire

    Bean的自动装配 Bean的自动装配 Spring IOC容器可以自动装配Bean.需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式 public class Ca ...

  10. Bean的自动装配(autowire)

    自动装配 介绍 测试 环境搭配 创建三个实体类 beans.xml 结果 byname自动装配 更改上面的beans.xml 结果 再次修改beans.xml 修改beans.xml byType 测 ...

最新文章

  1. 解决ScrollView嵌套ListView高度的问题
  2. 文献学习(part41)--Locality constraint distance metric learning for traffic congestion detection
  3. Hibernate5-1对多(1:n)-级联删除-cascade=delete-orphanl
  4. 变量的解构赋值(对象)
  5. Fuel9.0下的neutron-network网络(实际环境)--有疑问
  6. VB中DoEvents的注意事项
  7. 启动开源项目 XDD
  8. 524.通过删除字母匹配到字典里最长的单词(力扣leetcode) 博主可答疑该问题
  9. 二 详解VBA编程是什么
  10. JavaCV最小依赖
  11. 计算机cdr教程,计算机平面设计案例教程 (Photoshop+CorelDRAW)
  12. sofa-seata
  13. [c#]使用Fleck实现简单的WebSocket含兼容低版本IE
  14. npm 和 yarn 安装和卸载包
  15. [嵌入式基础]-arm架构和x86架构区别
  16. ElasticSearch之HTTP索引操作和文档操作
  17. spring 注解@primary解析
  18. SAE英文会议论文模板及翻译
  19. java小游戏(连连看)
  20. 数据库设计第一范式(1NF)

热门文章

  1. QQ2010正式版下载
  2. Java日志框架学习--JUL和Log4j--上
  3. UM2 3D 打印机 DIY 实践 ( 4)LCD12864 篇
  4. Windows 10 1903 版本 打开 MMC无法创建管理单元
  5. python就业前景如何_Python就业前景如何?三大就业岗位分享
  6. 电子翻书的特点和优点,可以应用于哪里
  7. 《C++类基本知识和6个默认成员函数详细剖析》
  8. TDengine Taos数据库同步服务
  9. 多商户商城系统功能拆解04讲-平台端商家入驻
  10. RabbitMQ连接超时Timed out